2021-02-19


C#笔记:WPF中资源字典的使用

 

目的:用资源字典编写全局的样式,方便不同UI调用,提高代码的复用性,减少冗余。

方法:

1、引用本项目下的资源字典,可直接在UI里添加引用。

例如:此时该资源字典里面的内容即可直接使用。

 <Window.Resources>
        <ResourceDictionary Source="NewDictionary.xaml"/>
 </Window.Resources>

 <Grid>
        <TextBlock Style="{StaticResource NewTextStyle}"/>
 </Grid>

也可以把该资源字典添加到App.xaml里,全局都可以访问,无需再单独UI里面添加引用

<Application.Resources>
        <ResourceDictionary Source="NewDictionary.xaml"/>
</Application.Resources>

<Grid>
        <TextBlock Style="{StaticResource NewTextStyle}"/>
</Grid>

还有一种写法笔者本身不太推荐,即使用代码调用资源字典,只有在运行的时候才看得到效果,不利于设计开发。

必须要在窗体实例化之前调用,否则会因为找不到资源无法生成窗体。(不推荐)

public MainWindow()
        {

            this.Resources = new ResourceDictionary()
            { Source = new Uri("pack://Application:,,,/NewApp;component/NewDictionary.xaml") };

            InitializeComponent();

        }

 <Grid>
        <!--此时这里会提示无法解析NewTextStyle资源,但是App启动后会通过代码找到相应资源-->
        <TextBlock Style="{StaticResource NewTextStyle}"/> 
 </Grid>

2、引用外部的资源字典,首先本项目要引用外部项目,然后使用Uri来引用

例如:直接在UI中添加引用,此时资源字典只在该UI生效。

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/NewApp;component/NewDictionary.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/TestResurceDictionary;component/Resources/MyDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/MyDictionary1.xaml"/>
        </ResourceDictionary>
    </Window.Resources>

 <TextBlock Grid.Row="0" Style="{StaticResource MyTextBlock}"/>
 <TextBlock Grid.Row="1" Style="{StaticResource NewTextStyle}"/>

 如果在App.xaml里面添加资源字典,那么当前的UI都可以使用

<ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Resources/MyDictionary.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/NewApp;component/NewDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
 

 

 

上一篇:认识WPF


下一篇:WPF教程(四)RelativeSource属性