开发者社区> zting科技> 正文

WPF 文件级资源(类似与使用CSS文件,然后引用CSS文件)

简介:
+关注继续查看

1. 文件级资源:定义在资源字典的XAML文件中,添加“资源字典(Resource Dictionary)”类型的项

文件名为Dictionary1.xaml

ExpandedBlockStart.gif
1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
3 <SolidColorBrush Color="Red" x:Key="redBrush"></SolidColorBrush>
4 </ResourceDictionary>

以下是WIndow1.xaml文件

ExpandedBlockStart.gif
复制代码
 1 <Window x:Class="WpfWindowAndDialog.Window1"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="Window1" Height="300" Width="300" WindowStartupLocation="CenterScreen">
5 <Window.Resources>
6 <ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
7 </Window.Resources>
8 <Grid>
9 <Button Height="23" HorizontalAlignment="Left" Background="{StaticResource ResourceKey=redBrush}"
10      Margin="10,10,0,0" Name="button1" VerticalAlignment="Top"  >Button</Button>
11 </Grid>
12 </Window>
复制代码

类似与使用CSS文件,然后引用CSS文件.可以有多个资源文件,这样便于管理

2.对象(控件)级资源:定义在某个ContentControl中,作为其子容器、子控件共享的资源

定义在资源字典的XAML文件中,添加“资源字典(Resource Dictionary)”类型的项

文件名为Dictionary1.xaml

ExpandedBlockStart.gif
1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
3 <SolidColorBrush Color="Red" x:Key="redBrush"></SolidColorBrush>
4 </ResourceDictionary>

Window2.xaml文件

ExpandedBlockStart.gif
复制代码
<Window x:Class="WpfWindowAndDialog.Window2"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
Title
="Window1" Height="300" Width="300" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.Resources>
<ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
</Grid.Resources>
<Button Height="23" HorizontalAlignment="Left" Background="{StaticResource ResourceKey=redBrush}" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" >Button</Button>
</Grid>
</Window>
复制代码

3.将图形作为一种资源来使用

ExpandedBlockStart.gif
复制代码
 1 <Window x:Class="WpfWindowAndDialog.Window3"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="Window1" Height="300" Width="300" WindowStartupLocation="CenterScreen">
5 <Window.Resources>
6 <Ellipse x:Key="myEllipse" Fill="Yellow" Height="100"/>
7 </Window.Resources>
8 <StackPanel>
9 <StaticResource ResourceKey="myEllipse"/>
10 </StackPanel>
11 </Window>
复制代码

(2)重用绘图资源

ExpandedBlockStart.gif
复制代码
 1 <Window x:Class="WpfWindowAndDialog.Window4"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="Window1" Height="300" Width="300" WindowStartupLocation="CenterScreen">
5 <Window.Resources>
6 <GeometryDrawing x:Key="drawing" Brush="Green">
7 <GeometryDrawing.Geometry>
8 <EllipseGeometry RadiusX="200" RadiusY="10"/>
9 </GeometryDrawing.Geometry>
10 </GeometryDrawing>
11 <DrawingBrush x:Key="dbrush" Drawing="{StaticResource drawing}"></DrawingBrush>
12 </Window.Resources>
13 <StackPanel>
14 <Rectangle Width="250" Height="50" Fill="{StaticResource dbrush}">
15 </Rectangle>
16 <Rectangle Width="250" Height="50" Fill="{StaticResource dbrush}">
17 </Rectangle>
18 </StackPanel>
19 </Window>
复制代码

4.皮肤与主题

两款非常简单的皮肤文件

ExpandedBlockStart.gif
复制代码
1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
3 <Style TargetType="{x:Type Button}">
4 <Setter Property="Background" Value="Blue"/>
5 <Setter Property="Foreground" Value="White"/>
6 </Style>
7 <SolidColorBrush x:Key="appBackground" Color="#EEF"/>
8 </ResourceDictionary>
复制代码
ExpandedBlockStart.gif
复制代码
1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
3 <Style TargetType="{x:Type Button}">
4 <Setter Property="Background" Value="Green"/>
5 <Setter Property="Foreground" Value="White"/>
6 </Style>
7 <SolidColorBrush x:Key="appBackground" Color="#EEF"/>
8 </ResourceDictionary>
复制代码

引用皮肤的文件

ExpandedBlockStart.gif
复制代码
 1 <Window x:Class="Chapter12.<Window x:Class="Chapter12.Window1"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="Window1" Height="300" Width="300" Background="{DynamicResource appBackground}">
5 <Grid>
6 <Grid.RowDefinitions>
7 <RowDefinition/>
8 <RowDefinition/>
9 <RowDefinition/>
10 </Grid.RowDefinitions>
11 <RadioButton x:Name="chooseGreenSkin" Grid.Row="0" Content="Green"/>
12 <RadioButton x:Name="chooseBlueSkin" Grid.Row="1" Content="Blue"/>
13 <Button Grid.Row="2">Hello</Button>
14 </Grid>
15 </Window>"
16 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
17 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
18 Title="Window1" Height="300" Width="300" Background="{DynamicResource appBackground}">
19 <Grid>
20 <Grid.RowDefinitions>
21 <RowDefinition/>
22 <RowDefinition/>
23 <RowDefinition/>
24 </Grid.RowDefinitions>
25 <RadioButton x:Name="chooseGreenSkin" Grid.Row="0" Content="Green"/>
26 <RadioButton x:Name="chooseBlueSkin" Grid.Row="1" Content="Blue"/>
27 <Button Grid.Row="2">Hello</Button>
28 </Grid>
29 </Window>
复制代码

Window.xaml的后台代码

ExpandedBlockStart.gif
复制代码
 1 using System;
2 using System.Collections.ObjectModel;
3 using System.Windows;
4
5 namespace Chapter12
6 {
7 /// <summary>
8 /// Window1.xaml 的交互逻辑
9 /// </summary>
10 public partial class Window1 : Window
11 {
12 public Window1()
13 {
14 InitializeComponent();
15 EnsureSkins();
16 chooseBlueSkin.Click += SkinChanged;
17 chooseGreenSkin.Click+=SkinChanged;
18 }
19
20 static ResourceDictionary greenSkin;
21 static ResourceDictionary blueSkin;
22
23 void EnsureSkins()
24 {
25 if(greenSkin == null)
26 {
27 greenSkin = new ResourceDictionary();
28 greenSkin.Source = new System.Uri("GreenSkin.xaml", UriKind.Relative);
29
30 blueSkin = new ResourceDictionary();
31 blueSkin.Source = new System.Uri("BlueSkin.xaml", UriKind.Relative);
32 }
33 }
34
35 void SkinChanged(object o, EventArgs e)
36 {
37 if (chooseGreenSkin.IsChecked.Value)
38 {
39 ApplySkin(greenSkin);
40 }
41 else
42 {
43 ApplySkin(blueSkin);
44 }
45 }
46
47 void ApplySkin(ResourceDictionary newSkin)
48 {
49 Collection<ResourceDictionary> appM = Application.Current.Resources.MergedDictionaries;
50 if (appM.Count != 0)
51 {
52 appM.Remove(appM[0]);
53 }
54 appM.Add(newSkin);
55
56 }
57 }
58 }
复制代码



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/07/30/2122149.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
91 0
在 vue-cli 脚手架中引用 jQuery、bootstrap 以及使用 sass、less 编写 css [vue-cli配置入门]
写在前面: 本文是vue-手摸手教你使用vue-cli脚手架-详细步骤图文解析之后,又一篇关于vue-cli脚手架配置相关的文章,因为有些文章步骤不够清晰,当时我引入JQuery、bootstrap的时候颇费了一番功夫,所以本文的步骤会尽量详细一点。有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家。 引入bootstrap 1. 下载所需要的bootstrap文件。 将要使用的bootstrap文件放入src目录下的assets文件夹中。 2. 在入口文件src/main.js中引入bootstrap import './assets/bootstrap-3.3.7
141 0
WPF中的一个bug造成CPU资源拉满
WPF中的一个bug造成CPU资源拉满
66 0
Pyhton编程:Django模板中引用css文件
Pyhton编程:Django模板中引用css文件
98 0
WPF资源字典怎么用
资源字典的使用方法
117 0
好程序员web前端分享CSS文件引用的最优方法
好程序员web前端分享CSS文件引用的最优方法,在html总引入css文件的方法:   1链接式:   2导入式:   区别:   使用链接式时,会在加载页面主体部分之前加载css文件,这样现实出来的页面一开始就是带有样式效果的,而使用导入式时,会在整个页面装载完成之后再装载css文件,对于有的浏览器来说,在一些情况下,如果页面文件的体积比较大,则会出现先现实无样式的页面,闪烁一下之后再出现设置样式的效果。
1068 0
WPF-- 合并资源字典
原文:WPF-- 合并资源字典 1.        合并多个外部资源字典成为本地字典   语言 ...
1052 0
WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary)
原文:WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary) 在文件夹或者项目右键-> Add(添加),会弹出可以快捷添加的资源,但是你会发现没有 ResourceDictionary资源可以选择。
3455 0
WPF BitmapImage 占用资源无法释放、无法删除问题
原文:WPF BitmapImage 占用资源无法释放、无法删除问题 使用Image控件显示图片后,虽然自己释放了图片资源,Image.Source =null 了一下,但是图片实际没有释放。解决方案:修改加载方式~        public static BitmapImage GetImage...
1874 0
避免让WPF资源字典变得杂乱臃肿
原文:避免让WPF资源字典变得杂乱臃肿                   避免让WPF资源字典变得杂乱臃肿                           周银辉 今天看到项目种的一个XXXResource.xaml文件代码有二千多行,这引发了我一些思考:如何组织我们的WPF资源。
912 0
+关注
zting科技
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
零基础CSS入门教程
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多