news 2026/10/30 4:21:29

WPF(资源、资源字典、样式、URL路径、嵌入资源)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WPF(资源、资源字典、样式、URL路径、嵌入资源)

二、资源

定义:资源就是类型实例化之后的对象。

每一个控件都有一个Resources属性,该属性存储了一个资源字典集合。

2.1资源查找顺序和作用范围

位置作用范围示例
Application.Resources(App.xaml)全局所有窗口
Window.Resources当前窗口仅该 Window 内控件
UserControl.Resources当前用户控件仅该 UserControl 内
控件的Resources(如 Grid.Resources)局部仅子元素可见

资源查找顺序:控件自身 → 父容器 → Window → Application → 系统默认。

2.2静态资源和动态资源

只是控件的使用方式不同,静态资源只在运行时加载一次,动态资源随资源改变而改变

示例:

<Window.Resources> <SolidColorBrush x:Key="aaa" Color="Red"></SolidColorBrush> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Background="{StaticResource aaa}" >111</Button> <Button Background="{DynamicResource aaa}" Grid.Row="1" Click="Button_Click">111</Button> </Grid>

cs文件:

改变资源aaa对应的值,动态资源更新,静态资源不变

private void Button_Click(object sender, RoutedEventArgs e) { this.Resources["aaa"]= new SolidColorBrush(Colors.Yellow); }

2.3资源管理形式

2.3.1窗口中直接定义

这里Resources中的内容以键对值形式加入,但是实际上形成了一个字典

<Window.Resources> <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#2bb6fe" /> <Style TargetType="Button"> <Setter Property="Background" Value="AliceBlue"/> </Style> </Window.Resources>

2.3.2appxaml中定义

和窗口一样的写法,只是作用域发生改变

<Application.Resources> <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#2bb6fe" /> <Style TargetType="Button"> <Setter Property="Background" Value="AliceBlue"/> </Style> </Application.Resources>

2.3.3资源字典

引入
<Window.Resources> //这里的Resources属性本身就是ResourceDictionary类的引用类型,这里相当于传给他一个对象 <ResourceDictionary> //mergedDictionaries是一个connect集合,多个集合合并时相同只保留一个 <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Dictionary1.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources>
定义

项目右键创建资源字典

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush x:Key="aaa" Color="Red"></SolidColorBrush> </ResourceDictionary>

资源字典的合并

  • 在MergedDictionaries集合中,当多个被合并的字典定义了相同的资源键(x:Key)时,最后被加入的字典中的资源生效
  • 在同一个ResourceDictionary中,直接定义的本地资源(内联资源)优先级高于所有通过MergedDictionaries合并进来的资源

样式(style)

TargetType属性:这是一个类类型,也就是一个反射,这个属性指明了当前样式要作用于哪种类型的控件上。因为WPF中有许多的控件,我们定义一个样式时,必须要指明这个样式的“适用范围”。

BasedOn属性:样式也有继承的概念,所以,BasedOn指明了当前样式继承于哪个样式

Triggers属性:这是一个集合属性,表示触发器的定义,当满足某些条件时,触发哪些行为,以使控件达到一定的“节目效果”。比如当鼠标移上去时,控件的背景颜色变成红色。这些的效果就可以通过定义控件的触发器来设置。

Setters属性:这也是一个集合属性,样式是控件属性的值的“提前设置”,所以,我们对控件属性的值的设置都是以Setter条目的形式,一条一条的放到这个Setters集合中。

Setter的使用

<Style TargetType="TextBox"> <Setter Property="BorderBrush" Value="#CCC" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="Padding" Value="4,2" /> <Setter Property="MinHeight" Value="24" /> </Style>

TargetType与BasedOn的使用

<!-- 基样式:隐式 --> <Style TargetType="Button"> <Setter Property="Padding" Value="8,4" /> <Setter Property="MinHeight" Value="28" /> <Setter Property="Background" Value="White" /> <Setter Property="BorderBrush" Value="#999" /> </Style> <!-- 变体 1:继承隐式样式,只改差异 --> <Style x:Key="ToolbarButton" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> <Setter Property="FontSize" Value="11" /> <Setter Property="Padding" Value="4,2" /> <Setter Property="MinHeight" Value="26" /> </Style> <!-- 变体 2:继承 ToolbarButton,再加橙色 --> <Style x:Key="AccentButton" TargetType="Button" BasedOn="{StaticResource ToolbarButton}"> <Setter Property="Background" Value="#F5A623" /> <Setter Property="BorderBrush" Value="#D48806" /> </Style>
应用样式
<Button Margin="5,0,0,0" Content="清空" Style="{StaticResource ToolbarButton}" />
(1) Property Trigger(属性触发器)
<Style TargetType="Button"> <Setter Property="Background" Value="LightGray" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Yellow" /> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter Property="Background" Value="Red" /> </Trigger> </Style.Triggers> </Style>
(2) DataTrigger(数据触发器)

根据绑定数据值改变样式:

<Style TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding IsImportant}" Value="True"> <Setter Property="FontWeight" Value="Bold" /> <Setter Property="Foreground" Value="Red" /> </DataTrigger> </Style.Triggers> </Style>
(3) EventTrigger(事件触发器,常用于动画)
<Style TargetType="Button"> <Style.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.2" Duration="0:0:0.3" AutoReverse="True" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers> </Style>

原文链接:https://www.cnblogs.com/tlnshuju/p/19433520

一、Pack URL(路径)

Pack URI(Pack Uniform Resource Identifier)用于统一标识和定位资源的 URI 方案

📌核心作用:
让你用一种标准方式引用:

  • 当前程序集中的资源(如图片、样式、XAML)
  • 其他程序集(DLL)中的资源
  • 应用程序安装目录下的外部文件

📌规定:

  • 必须使用正斜杠/

1.1Application Data URI(嵌入资源)

pack://application:,,,/程序集名称;component/资源路径
  • 如果省略程序集名称,表示当前程序集。
  • component是关键字,表示资源在程序集内部,当前程序集可省略。

1.1.1当前程序集中的资源(最常见)

示例-项目结构:

1MyApp/ 2├── App.xaml 3└── Assets/Images/logo.png
简略写法(最常用)
  • 所有以/开头的相对 URI 在 WPF 中都会被自动解释为pack://application:,,,/
  • /作用是回到根目录
/Assets/Images/logo.png
完整写法
pack://application:,,,/Assets/Images/logo.png

1.1.2其他程序集(类库)中的资源

示例:

类库名:MyLibrary
资源路径:Themes/Generic.xaml

  • 简写形式(仍需保留;component):uri
    MyLibrary;component/Themes/Generic.xaml
  • 完整写法
pack://application:,,,/MyLibrary;component/Themes/Generic.xaml

1.2Site of Origin URI(松散文件)

用于访问未嵌入程序集、而是放在应用程序部署目录(如bin\Debug或安装目录)中的文件。

1. 语法(无简写!)

pack://siteoforigin:,,,/相对路径

2. 示例

假设你的应用安装在C:\MyApp\,目录下有:

1C:\MyApp\ 2├── MyApp.exe 3└── Data/config.json
Uri uri = new Uri("pack://siteoforigin:,,,/Data/config.json");

⚠️ 注意:

  • 不能简写(不能写成/Data/config.json,那会被当作嵌入资源)
  • 文件必须存在且 Build Action =None或Content(并复制到输出目录)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/30 4:07:54

Google Gemma-4-26B-A4B-it-GGUF硬件需求分析:从8GB到50GB显存配置方案

Google Gemma-4-26B-A4B-it-GGUF硬件需求分析&#xff1a;从8GB到50GB显存配置方案 Google Gemma-4-26B-A4B-it-GGUF是由Google开发的大型语言模型的量化版本&#xff0c;基于Gemma-4-26B-A4B-it基础模型通过llama.cpp量化而成。本文将详细分析不同量化版本的硬件需求&#xf…

作者头像 李华