WPF基础之元素绑定
元素绑定
绑定表达式
- <Slider Grid.Row="0" Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1" TickPlacement="TopLeft">
</Slider>- <TextBlock Grid.Row="1" Margin="10" Text="Simple Text" Name="lblSimpleText"FontSize="{Binding ElementName=sliderFontSize,Path=Value}">
- </TextBlock>
绑定错误
绑定模式
名称 | 说明 |
OneWay | 当源属性变化时更新目标属性。 |
TwoWay | 当源属性变化时更新目标属性,并且当目标属性变化时更新源属性。 |
OneTime | 最初根据源属性设置目标属性,然而,其后的所有改变都会被忽略。通常如果知道属性不会变化,可通过这种模式降低开销。 |
OneWayToSource | 与OneWay相反,当目标属性变化时更新源属性。 |
Default | 此类绑定依赖于目标属性,既可以是双向的,也可以是单向的。除非明确指定了一种绑定模式,否则所有绑定使用该方法 |
使用代码创建绑定
- Binding binding = new Binding();
- binding.Source = sliderFontSize;
- binding.Path = new PropertyPath("Value");
- binding.Mode = BindingMode.TwoWay;
- lblSimpleText.SetBinding(TextBlock.FontSizeProperty,binding);
多绑定
- <TextBlock Grid.Row="1" Margin="10" Name="lblSimpleText"
- FontSize="{Binding ElementName=sliderFontSize,Path=Value}"
- Text="{Binding ElementName=txtContent,Path=Text}"
- Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}">
- </TextBlock>
绑定更新
名称
|
说明
|
PropertyChanged | 当目标属性变化时立即更新源。 |
LostFocus | 当目标属性变化并且目标属性失去焦点时跟新源。 |
Explicit | 除非调用BindingExpression.UpdateSource()方法,否则无法更新源。 |
Default | 根据目标属性的元素确定更新行为。大多数属性的默认行为是PropertyChanged,但TextBox.Text属性的默认行为是LostFocus |
绑定延迟
- <TextBox Text="{Binding ElementName=txtSampleText,Path=FontSize,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}" Name="txtFontSize">
</TextBox>
绑定到非元素对象
-
Source:该属性是指向源对象的引用,提供数据的对象。
-
RelativeSource:这是引用,使用RelativeSource对象指向源对象。有了这个附加层,在在当前元素的基础上构建引用。这似乎增加了复杂程度,
-
DataContext:如果没有使用Source或RelativeSource属性指定源,WPF就从当前元素开始在元素树中向上查找。检查每个属性的DataContext属性,并使用第一个飞空的DataContext属性。
Source
- <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
2.绑定到资源
- <Window.Resources>
- <FontFamily x:Key="CoustomFont">Calibri</FontFamily>
- </Window.Resources>
- <Grid>
- <TextBlock Text="{Binding Source={StaticResource CoustomFont},Path=Source}"></TextBlock>
- </Grid>
RelativeSource
- <TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>
名称
|
说明
|
Self | 表达式绑定到同一元素的另一个属性上。 |
FindAncestor | 表达式绑定到父元素。WPF将查找元素树直至发现期望的父元素。为了指定父元素,还必须设置AncestorType属性以指示希望查找的父元素类型。此外,还可以用AncestorLevel属性略过发现的一定的数量的特定元素。例如当一棵树中查找时,如果希望绑定到第三个ListBoxItem类型的元素,应当使用如下设置,AncestorType={x:Type ListBoxItem};并且AncestorLevel=3,从而略过前连个ListBoxItem元素。默认值是1,并在找到第一个匹配的元素停止查找。 |
PreviousData | 表达式绑定到数据绑定列表中前一个数据项。在列表中使用这种模式。 |
TemplateParent | 表达式绑定到应用模版的元素。只有当绑定位于控件模版或数据模版内部时,这种模式才能工作。 |
DataContext属性
- <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
- <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
- <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
可以改成如下
- <StackPanel DataContext="x:Static SystemFonts.IconFontFamily">
- <TextBlock Text="{Binding Path=Source}"></TextBlock>
- <TextBlock Text="{Binding Path=Source}"></TextBlock>
- <TextBlock Text="{Binding Path=Source}"></TextBlock>
- </StackPanel>