WPF中绑定到非元素对象
1. Source属性
<Window x:Class="项目10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:项目10"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<FontFamily x:Key="CutomFont">Calibri</FontFamily>
<FontFamily x:Key="CutomFont1">Seria</FontFamily>
</Window.Resources>
<Grid>
<StackPanel Margin="25">
<TextBlock x:Name="TextBlock1" Margin="5" Text="{Binding Source={StaticResource CutomFont1},Path=Source}"/>
<TextBlock x:Name="TextBlock2" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/>
</StackPanel>
</Grid>
</Window>
2. RelativeSoure属性
<Grid>
<StackPanel Margin="25">
<TextBlock x:Name="TextBlock1" Margin="5" Text="{Binding Source={StaticResource CutomFont1},Path=Source}"/>
<TextBlock x:Name="TextBlock2" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/>
<TextBlock x:Name="TextBlock3" Margin="5">
<TextBlock.Text>
<Binding Path="Title">
<Binding.RelativeSource>
<RelativeSource Mode="FindAncestor" AncestorType="{x:Type Window}"></RelativeSource>
</Binding.RelativeSource>
</Binding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</Grid
<TextBlock Name="TextBlock4" Margin="25" Text="{Binding Path=Title,RelativeSource={RelativeSource
Mode=FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>
3. DataContext属性
<TextBlock x:Name="TextBlock5" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
<TextBlock x:Name="TextBlock6" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=LineSpacing}"></TextBlock>
<TextBlock x:Name="TextBlock7" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=FamilyTypefaces}"></TextBlock>
下面的代码与之等效
<StackPanel Margin="5" Name="StackPanel2" DataContext="{x:Static SystemFonts.IconFontFamily}">
<TextBlock Name="TextBlock4" Margin="25" Text="{Binding Path=Title,RelativeSource={RelativeSource
Mode=FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>
<TextBlock x:Name="TextBlock5" Margin="5" Text="{Binding Path=Source}"></TextBlock>
<TextBlock x:Name="TextBlock6" Margin="5" Text="{Binding Path=LineSpacing}"></TextBlock>
<TextBlock x:Name="TextBlock7" Margin="5" Text="{Binding Path=FamilyTypefaces}"></TextBlock>
</StackPanel>