WPF资源的使用

目录

本地文件资源的使用

图片使用

设置图片属性:

本地图片加载:

直接加载url使用,使用网络图片

跨程序集使用:常用方法

音视频使用

字体图标文件的使用

字体图标文件的操作与合并

资源字典的使用

资源字典切换案例


本地文件资源的使用

图片使用

图片有两种使用方式

设置图片属性:

生成操作改为资源即可:

如果不设置资源的话,就算设计器中显示图片,启动程序的时候也是空白的。

<Image Source="/assets/images/r.jpg" Height="80" Width="100"/>

本地图片加载:

使用本地的时候,协议头:"pack://siteoforigin:,,,"是必须得,

Source = "pack://siteoforigin:,,,/路径"

<Image Source="pack://siteoforigin:,,,/assets/images/2.jpg" Height="80" Width="100"/>

直接加载url使用,使用网络图片

<Image Source="https://img-home.csdnimg.cn/images/20201124032511.png" 
  Height="80" Width="100"/>

跨程序集使用:常用方法

第一步、新建程序集:必须创建程序集:WPF类库 WPF用户控件库 WPF自定义控件库,才能加载文件

第二步、这里面文件统一设置资源属性,和上面设置生成操作-->资源 一样。

第三步、在当前程序集下需要引用需要使用的程序集

第四部、xaml写法注意:

使用跨程序集的时候,协议头:"pack://application:,,,"非必须,可以省略,也可以直接拖拽到xaml中,就默认省略协议头。

完整写法:[pack://application:,,,]/程序集名称;[版本号;][公钥;]component/路径

 <Image Source="pack://application:,,,/XH.Assets;component/Images/R.jpg"
   Height="80" Width="100"/>

加载成功:

音视频使用

MediaElement控件的使用

这个控件可以加载音频

由于比较大,音频 必须是本地 ,和图片本地一样,也是用固定的协议头,然后加路径。

<MediaElement Source="pack://siteoforigin:,,,/assets/audio/1.mp4" Height="40"/>

字体图标文件的使用

这里我使用的是阿里矢量图:iconfont-阿里巴巴矢量图标库

第一步、下载字体文件

第二步、将下载的压缩包解压,选择里面的tff文件,复制放入到程序中:

第三步、把需要的tff文件属性,生成方式-->资源

第四步、把想要使用的图标去字体库中复制代码放入想要显示图标的地方

语法:assets/Fonts/[iconfont.ttf]#iconfont

文件名称可以省略 但是后面的字体名称不可以省略

字体名称就是双击tff打开显示的第一行字体名称:

<TextBlock Text="&#xe61f;" FontFamily="/assets/fonts/#iconfont" 
  HorizontalAlignment="Center"/>

可以在字体库中,设置大小,编辑颜色(但是颜色对于字体图标无效,因为可以设置字体颜色)。

字体图标文件的操作与合并

如果有两个字体图标文件的话,咱就可以不写文件名,直接设置字体名称即可。

利用资源进行操作:

<Window.Resources>
    <FontFamily x:Key="iconfont">assets/fonts/#iconfont</FontFamily>
<StackPanel>
    <TextBlock Text="&#xe662;" FontFamily="{StaticResource iconfont}"
      HorizontalAlignment="Center"/>
</StackPanel>

资源字典的使用

在需要的程序集下面添加文件,添加资源字典即可 也是xaml格式

资源字典中和XAML中写法一样,直接写入Style即可 设置TargetType 和 Key

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="TextBox">
        <Setter Property="Width" Value="80"/>
        <Setter Property="Height" Value="40"/>
        <Setter Property="Background" Value="Orange"/>
        <Setter Property="Foreground" Value="Green"/>
    </Style>
</ResourceDictionary>

使用:

 <Window.Resources>
     <ResourceDictionary Source="assets/res/textboxStyles.xaml" />
 </Window.Resources>
 <StackPanel>
     <!--练习-->
     <TextBox Text="TextBox" />
 </StackPanel>

这里我只是引用了资源字典就可以直接改变样式:

因为我没有设置key,所以所有的TextBox 都生效。

当多个资源字典的时候,使用资源合并:

 <ResourceDictionary>
     <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary Source="assets/res/textboxStyles.xaml" />
         <ResourceDictionary Source="assets/res/buttonStyles.xaml" />
     </ResourceDictionary.MergedDictionaries>
 </ResourceDictionary>

当需要写style的时候,尽量写在MergedDictionaries 之后,因为有些会渲染不上,这是个小BUG,注意就好,优先级不一样。

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="assets/res/textboxStyles.xaml" />
        <ResourceDictionary Source="assets/res/buttonStyles.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Black"/>
    </Style>
</ResourceDictionary>

资源字典切换案例

需求:实现主题切换和语言切换

第一步、先设置两个资源字典,设置需要切换的属性

内容如下:

<!--中文字典代码-->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=System.Runtime">
    <sys:String x:Key="title">小海课堂</sys:String>
    <SolidColorBrush x:Key="titleBackground">#DDD</SolidColorBrush>
    <SolidColorBrush x:Key="titleForeground">#000</SolidColorBrush>
</ResourceDictionary>

<!--英文字典代码-->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=System.Runtime">
    <sys:String x:Key="title">XiaoHai EDU</sys:String>
    <SolidColorBrush x:Key="titleBackground">#FF0000</SolidColorBrush>
    <SolidColorBrush x:Key="titleForeground">#CCC</SolidColorBrush>
</ResourceDictionary>

<Window.Resources>
    <!--一定要设置name 切换有用-->
    <ResourceDictionary Source="Assets/Res/Th_cn.xaml" x:Name="resDic"/>
</Window.Resources>
<StackPanel>
  <TextBlock Height="40" Text="{DynamicResource title}" Background="{DynamicResource titleBackground}" Foreground="{DynamicResource titleForeground}" />
  <Button Content="切换主题/语言" Click="Button_Click" />
</StackPanel>

样式如图:

设置C#代码

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.resDic.Source = new Uri("Assets/Res/Th_en.xaml",UriKind.Relative);
}

原理:设置动态属性,每次切换的时候,改变的是资源字典中的Source的路径。

切换前:

切换后:

相关推荐
呆呆小雅2 分钟前
C#关键字volatile
java·redis·c#
boligongzhu3 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
web1478621072321 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
Jasmine_llq1 小时前
《 火星人 》
算法·青少年编程·c#
明耀1 小时前
WPF TabControl 设置item不能点击
wpf
军训猫猫头3 小时前
20.抽卡只有金,带保底(WPF) C#
ui·c#·wpf
明耀3 小时前
WPF 设置平均布局 如果隐藏的话,能够自动扩展
wpf
向宇it13 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
向宇it15 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
晚安苏州16 小时前
WPF DataTemplate 数据模板
wpf