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>