项目源码
把TextBlock的Text属性绑定到静态的SystemFonts.IconFontFamily:
<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/>
或者在窗体中定义源:
用元素属性定义了两个资源
<Window.Resources>
<FontFamily x:Key="CustomFont">
Calibri
FontFamily>
<FontFamily x:Key="CustomFont2">
Seria
FontFamily>
Window.Resources>
使用资源时:
<TextBlock Text="{Binding Source={StaticResource CustomFont2},Path=Source}"/>
在一个Window里面,绑定的属性为层级的属性:
<TextBlock>
<TextBlock.Text>
<Binding Path="Name">
<Binding.RelativeSource>
<RelativeSource Mode="FindAncestor" AncestorType="{x:Type StackPanel}">
RelativeSource>
Binding.RelativeSource>
Binding>
TextBlock.Text>
TextBlock>
这就将TextBlock的Text属性绑定到了它的父级元素StackPannel的Name属性上。
如果Binding Path=“Title”,AncestorType="{x:Type Window}",则是绑定到了它的父级元素Window的Title属性上了。
如果 Mode=“Self”,则是绑定到了自身:
<Binding Path="Margin">
<TextBlock Name="textBlock4" Margin="5" Text="{Binding Path=Title,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}">
AncestorLevel=1用于设置往上寻找父级元素的层数,例如
<TextBlock Name="textBlock4" Margin="5" Text="{Binding Path=Name,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type StackPanel},AncestorLevel=2}}">
就往上寻找父元素,直到找到第二个,就是最外层的,如果设为1,就是内层的。
将大量的属性绑定到同一个元素。
例如下面三个TextBlock
<TextBlock Name="textBlock5" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/>
<TextBlock Name="textBlock6" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=LineSpacing}"/>
<TextBlock Name="textBlock7" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=FamilyTypefaces[0].Style}"/>
都绑定到了同一个Source,但是不同Path,代码过于重复,这时候适合使用DataContext属性。
我们在它们的父级元素之下设置DataContext属性即可:
<StackPanel Margin="3" Name="stackPannel1" DataContext="{x:Static SystemFonts.IconFontFamily}">
TextBlock元素不需要设置Source属性了,只需要设置Path属性:
<TextBlock Name="textBlock5" Margin="5" Text="{Binding Path=Source}"/>
<TextBlock Name="textBlock6" Margin="5" Text="{Binding Path=LineSpacing}"/>
<TextBlock Name="textBlock7" Margin="5" Text="{Binding Path=FamilyTypefaces[0].Style}"/>
像这样的绑定属性Binding只有Path而没有Source,控件会一直向父级元素搜索DataContext属性,直到找到最近的作为自己的源,否则,如果找不到,就不会绑定到任何源。
所以像这个例子,DataContext只要设置在TextBlock的某一个上级元素中即可供TextBlock用作源。