参考:WPF中的Binding的常见知识点与技巧_哔哩哔哩_bilibili

总结了一些:wpf中的binding的方式。

<Window x:Class="WpfBindingDemo.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"
        FontSize="20"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfBindingDemo"
        mc:Ignorable="d"
        x:Name="myWindow"
        Title="MainWindow" Height="1050" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
       
    </Window.DataContext>
    <Window.Resources>
        <sys:String x:Key="test">测试数据</sys:String>
        <local:MyResource x:Key="myres"></local:MyResource>
    </Window.Resources>
    <Grid>
        <StackPanel Margin="10" Orientation="Vertical" VerticalAlignment="Top">
            <TextBox Text="{DynamicResource test}" x:Name="txtName" ></TextBox>
            <TextBlock Text="{Binding Source={StaticResource test} }" x:Name="txtTest" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{StaticResource test}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{DynamicResource test}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding Source={StaticResource myres},Path=Message}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding Source={x:Static local:MyResource.ConstString}}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding Source={x:Static local:MyResource.StaticString}}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding Source={x:Static local:MyEnum.Message}}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding ElementName=txtName, Path=Text}" Width="460" Height="40"></TextBlock>
            <TextBlock Text="{Binding ElementName=txtName,Path=Text}">
                <TextBlock.ToolTip>
                    <TextBlock Text="{Binding ElementName=txtName,Path=Text}"></TextBlock><!--没有提示-->
                </TextBlock.ToolTip>
            </TextBlock>
            <TextBlock Text="{Binding ElementName=txtName,Path=Text}">
                <TextBlock.ToolTip>
                    <TextBlock Text="{Binding  Source={x:Reference Name=txtName},Path=Text}"></TextBlock> <!--ok-->
                </TextBlock.ToolTip>
            </TextBlock>
            <Button x:Name="btnTest" Width="100" Content="Click"></Button>
            <DataGrid>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID"></DataGridTextColumn>
                    <DataGridTextColumn Header="{Binding ElementName=txtName,Path=Text}"></DataGridTextColumn><!--没有提示-->
                    <DataGridTextColumn Header="Class"></DataGridTextColumn>
                    <DataGridTextColumn Header="{Binding Source={x:Reference Name=txtName },Path=Text}"></DataGridTextColumn><!--ok-->
                </DataGrid.Columns>
            </DataGrid>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Top,StringFormat='Top:{0:F3}'}"></TextBlock>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualHeight,StringFormat='Height:{0:C}'}"></TextBlock>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="Pos:{0:F2},{1:F2}">
                        <Binding ElementName="myWindow" Path="Top"></Binding>
                        <Binding ElementName="myWindow" Path="Left"></Binding>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
            <Label Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualHeight}" ContentStringFormat="Lable Height:{0:F0}"></Label>
            <ListBox>
                <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>
                <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>
                <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}"></TextBlock>
            </ListBox>
            <Label Padding="2" Content="测试label" Height="30">
                <Label.Template>
                    <ControlTemplate TargetType="Label">
                        <Border BorderBrush="Red" BorderThickness="1" Margin="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Padding}">
                            <ContentPresenter></ContentPresenter>
                        </Border>
                    </ControlTemplate>
                </Label.Template>
            </Label>
            <TextBlock Text="{Binding MessageKong,TargetNullValue=空}"></TextBlock>
            <TextBlock Text="{Binding MessageKong2,FallbackValue=MessageKong2不存在}"></TextBlock>
        </StackPanel>
        
    </Grid>
</Window>

类文件

namespace WpfBindingDemo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Resources["test"] = DateTime.Now.ToString();
        }
    }
    class MyResource
    {
        public string Message { get; set; } = "test 哈哈";
        public static string StaticString = "static string";
        public const string ConstString = "Const string";
    }
    public enum MyEnum
    {
        Message,
        OK,
        Error
    }

MainViewModel.cs

namespace WpfBindingDemo
{
    public  class MainViewModel
    {
        public string Name { get; set; }
        public string Message { get; set; } = "test 哈哈";
        public string MessageKong { get; set; }
    }
}

07-19 07:54