用XAML绑定
WPF元素不仅是数据绑定的目标,它还可以是绑定的源。
WPF元素不仅是数据绑定的目标,它还可以是绑定的源。
可以把一个WPF元素的源属性绑定到另一个WPF元素的目标属性上。
ElementName指向绑定源,Path指向源属性
此处CheckBox为绑定源,IsChecked为源属性,Label为目标
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
<CheckBox Name="checkBox" Content="CheckBox"/>
<Label Name="lb" Content="{Binding ElementName=checkBox,Path=IsChecked}"/>
</StackPanel>
除了用XAML代码定义绑定信息之外,还可以在隐藏代码中使用Binding元数据扩展来定义。
在隐藏代码中,必须新建一个Binding对象,并设置Path和Source属性。必须把Sourch属性设置为源对象,把Path属性设置为一个ProperyPath实例,它用源对象的属性名进行初始化。对于派生子FrameworkElement的控件,可以调用SetBindind()方法来定义绑定。
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
<CheckBox Name="checkBox" Content="CheckBox"/>
<Label Name="lb" Content=""/>
</StackPanel>
private void Init()
{
Binding binding = new Binding();
binding.Source = checkBox;
binding.Path = new PropertyPath("IsChecked");
lb.SetBinding(Label.ContentProperty, binding);
}
对于以下ScaleTransfrom不派生子FrameworkElement,而派生自Freezable基类。使用辅助类BindingOperations可以绑定这类控件。
BindingOperations类的SetBinding()方法需要一个DependencyObject,在本例中是ScaleTransform实例。对于第二个和第三个参数,SetBinding()方法还需要绑定目标的dependency属性和Binding对象。
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
<StackPanel.LayoutTransform>
<ScaleTransform x:Name="scaleTrans"/>
</StackPanel.LayoutTransform>
<CheckBox Name="checkBox" Content="CheckBox"/>
<Label Name="lb" Content="文本"/>
</StackPanel>
<Slider HorizontalAlignment="Left" VerticalAlignment="Bottom" x:Name="slider" Value="1" Minimum="0.4" Maximum="3" Width="150"/>
private void Init()
{
Binding binding = new Binding();
binding.Source = slider;
binding.Path = new PropertyPath("Value");
BindingOperations.SetBinding(scaleTrans, ScaleTransform.ScaleXProperty, binding);
BindingOperations.SetBinding(scaleTrans, ScaleTransform.ScaleYProperty, binding);
}