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的路径。

切换前:

切换后:

相关推荐
广煜永不挂科28 分钟前
Devexpress.Dashboard的调用二义性
c#·express
当下就是最好39 分钟前
WPF应用程序的生命周期-笔记
wpf
初九之潜龙勿用2 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
吾与谁归in4 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in4 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
神仙别闹5 小时前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
向宇it14 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九鼎科技-Leo15 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Heaphaestus,RC16 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
baivfhpwxf202316 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#