Xaml学习小结
- huuhghhgyg
- 1 min read
主要是Xaml的“绑定”和“资源”
Xaml静态资源绑定
需要绑定一个resource的时候,需要的表达式就是大括号里面有“StaticResource”,再加上resource的名字。这种绑定只在App运行的时候进行一次,因为是静态资源,所以它就不会变了。 如:
1<TextBlock Foreground = "{StaticResource MyBrush}" />
StaticResource
表明了我们所绑定的资源的类型
单个属性的绑定
可以创建单个属性的资源绑定,如:
1<Page.Resources>
2 <SolidColorBrush x:Key="MyBrush" Color="Brown"/>
3</Page.Resources>
4
5<!-- 使用 -->
6<TextBlock Text="Hello World" Foreground="{StaticResource MyBrush}"/>
还可以创建值绑定,如将Slider
的值绑定到ProgessBar
中:
1<ProgressBar Maximum="100" Value="{x:Bind MySlider.Value, Mode=OneWay}">
多个属性的绑定(Style)
也可以创建多个值类型的绑定,如设置背景、字体、字号等属性,如:
1<Page.Resources>
2 <Style TargetType="Button" x:Key="MyButtonStyle">
3 <!-- 定义了目标类型、样式(资源)名称 -->
4 <!-- 下面是各个属性值的设置 -->
5 <Setter Property="Background" Value="Blue"/>
6 <Setter Property="FontFamily" Value="Arial Black"/>
7 <Setter Property="FontSize" Value="36"/>
8 </Style>
9</Page.Resources>
10
11<Button Content="My Button Style Example"
12 Height="100"
13 Style="{StaticResource MyButtonStyle}" />
14 <!-- 资源的名称是“MyButtonStyle” -->
属性的继承
使用BasedOn
属性
如HeaderTextBlockStyle
就是继承自BaseTextBlockStyle
原文引用:
1<Style x:Key="HeaderTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource BaseTextBlockStyle}">
2 ...
3</Style>
跨页引用资源
如果要跨页引用属性定义,需要在App.xaml
的Application.Resources
里面添加定义
在App.xaml
中添加定义:
1<Application.Resources>
2 <!-- 在这里添加属性的定义 -->
3</Application.Resources>
这样,样式就已经在整个App中定义了。
Resource Dictionary
在Application.Resources
中设定的Resource Dictionary(资源字典)可以用于设置
- Resources
- SolidColorBrush
- Strings
- Styles
- StaticResource
- Control Templates
- Animation
- …
不仅在Page
和Application
层面可以创建Resource Dictionary,还可以创建名为Merged Resource Dictionary
,用于在多个文件中定义Resource Dictionary,以此降低程序的复杂性,并允许在不同的项目中重复使用Dictionary文档。
比如,在项目中创建一个Dictionary1.xaml
文件(ResourceDictionary
类型),内容如下:
1<ResourceDictionary
2 xmlns=""
3 ...>
4 <x:String x:Key="greeting">Hello World</x:String>
5<ResourceDictionary/>
在其它文件中的引用(以Page
为例):
1<Page.Resources>
2 <ResourceDictionary>
3 <ResourceDictionary.MergedDictionaries>
4 <!-- 可以合并多个Dictionary入这个文件,只需要向里面添加 -->
5 <ResourceDicitonary Source="Dictionary1.xaml">
6 <ResourceDictionary.MergedDictionaries/>
7 <ResourceDictionary/>
8<Page.Resources/>
使用系统已经构建好的主题
可以直接在Style="{StaticResource ...}"
里面根据IntelliSense查找,或者在控件的属性框内,找到Miscellaneous中的Style
,选中System Resource
,进行选择。
Xaml非静态资源绑定
ThemeResource
ThemeResource
和系统主题有关,使用系统主题中的颜色:
1<!-- 使用系统的主题色 -->
2<Rectangle Fill="{ThemeResource SystemAccentColor}">
3<!-- 使用系统的窗口颜色(亮/暗等) -->
4<Rectangle Fill="{ThemeResource SystemColorWindowColor}">