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>