简单的说,数据绑定是一种关系。

这个关系在WPF程序中体现为从某个对象中提取信息,然后将信息应用到另一个对象中。

1、绑定表达式

我们设置一个滑动条,通过滑动条的Value值控制下方文本的字体大小

<Window x:Class="_23.Binding_Elements.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Margin="5">
            <Slider Height="Auto" Name="slider1" Margin="3" 
                    Minimum="10" Maximum="50" Value="20" 
                    TickPlacement="TopLeft" TickFrequency="1"/>
            <TextBlock Height="Auto" Name="textBlock1" Text="测试文本" Margin="10"
                       FontSize="{Binding ElementName=slider1,Path=Value}"/>
        </StackPanel>
    </Grid>
</Window>

我们在文本框中的FontSize里面利用课绑定表达式,ElementName指的是绑定的控件名称,Path指的是绑定到该控件的哪一个属性,然后我们就可以运行程序看效果:

   

wpf ElementName 绑定自身属性 wpf绑定对象_Click

wpf ElementName 绑定自身属性 wpf绑定对象_wpf_02

2、绑定错误

这种绑定方式有一个问题,就是当我们Path的值设置错误时,比如我们设置为"Value1",这个属性为Slider控件不存在的一个属性,那么此时WPF程序也不会报错,这种绑定错误只会导致功能无法实现,但是程序还是可以运行。

3、绑定模式

绑定模式主要设置的是源对象和目标对象之间的绑定关系,默认的为单向。即源对象属性更改,目标对象的相应绑定的属性也发生更改,但是目标对象的属性更改时,不会影响源对象的属性。

我们可以设置绑定的模式为TwoWay,这样无论更改哪一个属性,相对的属性都会发生更改。

wpf ElementName 绑定自身属性 wpf绑定对象_ide_03

4、使用代码创建绑定关系

我们也可以不使用XAML语句,把XAML的绑定语句注释掉,通过C#代码来创建绑定的关系

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Binding bind = new Binding();//新建一个绑定类

            bind.Source = slider1;//设置绑定源对象
            bind.Path = new PropertyPath("Value"); //设置绑定源属性
            bind.Mode = BindingMode.TwoWay;//设置绑定模式;

            this.textBlock1.SetBinding(TextBlock.FontSizeProperty,bind);//设置绑定目标对象
        }

产生的效果是一样的。

我们还可以设置多重绑定关系,通过ListBox的ListItem来设置文本的颜色属性。

<Window x:Class="_23.Binding_Elements.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <StackPanel Margin="5">
            <Slider Height="Auto" Name="slider1" Margin="3" 
                    Minimum="10" Maximum="50" Value="20" 
                    TickPlacement="TopLeft" TickFrequency="1"/>
            <TextBlock Height="Auto" Name="textBlock1" Text="测试文本" Margin="10"
                       Foreground="{Binding ElementName=listBox1,Path=SelectedItem.Tag}"/>
            <!--FontSize="{Binding ElementName=slider1,Path=Value, Mode=TwoWay}"-->
            <Button Margin="5" Content="设置滑动条为30" Height="Auto" Name="button1" Width="Auto" Click="button1_Click" />
            <Button Margin="5" Content="取消绑定" Height="Auto" Name="button2" Width="Auto" Click="button2_Click" />
            <ListBox Margin="5" Height="Auto" Name="listBox1" Width="Auto">
                <ListBoxItem Tag="Red">Red</ListBoxItem>
                <ListBoxItem Tag="Green">Green</ListBoxItem>
                <ListBoxItem Tag="Blue">Blue</ListBoxItem>
            </ListBox>
        </StackPanel>
    </Grid>
</Window>

效果如下:

wpf ElementName 绑定自身属性 wpf绑定对象_xml_04

5、绑定更新

我们可以设置一个文本输入框,让用户直接输入字体的大小,输入完成后立马更新到文本字体的显示大小属性上

<Window x:Class="_23.Binding_Elements.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <StackPanel Margin="5">
            <Slider Height="Auto" Name="slider1" Margin="3" 
                    Minimum="1" Maximum="50" Value="20" 
                    TickPlacement="TopLeft" TickFrequency="1" IsSnapToTickEnabled="True"/>
            <TextBlock Height="Auto" Name="textBlock1" Text="测试文本" Margin="10"
                       Foreground="{Binding ElementName=listBox1,Path=SelectedItem.Tag}"/>
            <!--FontSize="{Binding ElementName=slider1,Path=Value, Mode=TwoWay}"-->
            <Button Margin="5" Content="设置滑动条为30" Height="Auto" Name="button1" Width="Auto" Click="button1_Click" />
            <Button Margin="5" Content="取消绑定" Height="Auto" Name="button2" Width="Auto" Click="button2_Click" />
            <ListBox Margin="5" Height="Auto" Name="listBox1" Width="Auto">
                <ListBoxItem Tag="Red">Red</ListBoxItem>
                <ListBoxItem Tag="Green">Green</ListBoxItem>
                <ListBoxItem Tag="Blue">Blue</ListBoxItem>
            </ListBox>
            <TextBox Margin="5" Height="23" Name="textBox1" Width="Auto" 
                     Text="{Binding ElementName=textBlock1, Path=FontSize, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </StackPanel>
    </Grid>
</Window>

wpf ElementName 绑定自身属性 wpf绑定对象_c#_05