WPF 引用动/静态资源示例

文章目录

      • [1. 定义和引用静态资源](#1. 定义和引用静态资源)
        • [1.1 定义资源](#1.1 定义资源)
        • [1.2 引用资源](#1.2 引用资源)
      • [2. 使用外部 ResourceDictionary](#2. 使用外部 ResourceDictionary)
        • [2.1 创建 ResourceDictionary 文件](#2.1 创建 ResourceDictionary 文件)
        • [2.2 引用 ResourceDictionary 文件](#2.2 引用 ResourceDictionary 文件)
        • [2.3 使用资源](#2.3 使用资源)
      • [3. 使用 DynamicResource](#3. 使用 DynamicResource)

在 WPF (Windows Presentation Foundation) 中,引用静态资源(例如颜色、样式、模板等)可以通过多种方式完成,具体取决于你要引用资源的位置和类型。以下是一些常见的方法:

1. 定义和引用静态资源

1.1 定义资源

通常,你会在 ResourceDictionary 中定义静态资源。资源可以定义在 App.xaml 文件中,也可以在单独的 ResourceDictionary 文件中。下面是一个在 App.xaml 中定义静态资源的例子:

html 复制代码
<Application x:Class="YourNamespace.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
        <ResourceDictionary>
            <Color x:Key="MyColor">#FF00FF</Color>
            <Style x:Key="MyButtonStyle" TargetType="Button">
                <Setter Property="Background" Value="{StaticResource MyColor}"/>
                <Setter Property="Foreground" Value="White"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>
1.2 引用资源

在 XAML 文件中引用静态资源时,可以使用 {StaticResource} 标记扩展。例如,在某个 Window 或 UserControl 中引用上面定义的资源:

html 复制代码
<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Style="{StaticResource MyButtonStyle}" Content="Click Me"/>
    </Grid>
</Window>

2. 使用外部 ResourceDictionary

可以将资源定义放在单独的 .xaml 文件中,然后在需要的地方进行引用。

2.1 创建 ResourceDictionary 文件

创建一个名为 Themes/Resources.xaml 的文件:

html 复制代码
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Color x:Key="MyColor">#FF00FF</Color>
    <Style x:Key="MyButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="{StaticResource MyColor}"/>
        <Setter Property="Foreground" Value="White"/>
    </Style>
</ResourceDictionary>
2.2 引用 ResourceDictionary 文件

在 App.xaml 中引用该资源文件:

html 复制代码
<Application x:Class="YourNamespace.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Themes/Resources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
2.3 使用资源

在窗口或控件中使用资源,与前面的例子一样:

html 复制代码
<Button Style="{StaticResource MyButtonStyle}" Content="Click Me"/>

3. 使用 DynamicResource

DynamicResource 与 StaticResource 类似,但是 DynamicResource 允许在运行时更改资源。如果你需要动态地切换主题或更改样式,这可能会很有用。

html 复制代码
<Button Style="{DynamicResource MyButtonStyle}" Content="Click Me"/>
相关推荐
heimeiyingwang2 天前
【架构实战】状态机架构:订单/工单状态流转设计
观察者模式·架构·wpf
KmSH8umpK3 天前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第三篇
redis·分布式·wpf
KmSH8umpK3 天前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案
redis·分布式·wpf
武藤一雄3 天前
WPF:MessageBox系统消息框
前端·microsoft·c#·.net·wpf
武藤一雄3 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
wangnaisheng3 天前
【WPF】路由事件详细使用
wpf
雨浓YN4 天前
GKMLT通讯工具箱(WPF MVVM) - 07-倍福ADS通讯
网络·wpf
雨浓YN4 天前
GKMLT通讯工具箱(WPF MVVM) - 04-三菱MC通讯
wpf
不会编程的懒洋洋4 天前
WPF XAML+布局+控件
xml·开发语言·c#·视觉检测·wpf·机器视觉·视图
雨浓YN4 天前
GKMLT通讯工具箱(WPF MVVM) - 06-OPCUA通讯
wpf