WPF combobox 解释RelativeSource

本文深入探讨了XAML代码中关于ComboBox控件的使用及RelativeSource属性的功能,包括如何在ComboBox中设置ItemStringFormat、SelectedValue及与Window之间的数据绑定关系,以及RelativeSource在不同场景下的应用方式。详细解析了如何利用RelativeSource属性实现元素间的相互引用,以及其在数据绑定中的作用。
摘要由CSDN通过智能技术生成
<Window x:Class="WpfApplication1.MainWindow"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow"  SizeToContent="WidthAndHeight">  
    <StackPanel Margin="10">  
        <ComboBox Name="comboBox"  ItemStringFormat="{}{0}秒" SelectedValue="{Binding Limit, RelativeSource={RelativeSource AncestorType=Window}}" />  
        <Button Content="" Click="Button_Click" />  
    </StackPanel>  
</Window> 

以上的combobox中  ItemStringFormat="{}{0}秒" 会在每个值后面加一个'秒'字

SelectedValue="{Binding Limit, RelativeSource={RelativeSource AncestorType=Window}}"

RelativeSource指明是相对路径来找数据源,源的类型是Window,即本xaml对应的xaml.cs中定义的数据源Limit.这里public int Limit { getset; } 

这时引申Itemsoure的指定也可是这样指定

 

 

<ComboBox x:Name="cmb" Grid.Row="0" Margin="10,8,10,8" ItemsSource="{StaticResource ec}"  SelectedValue="{Binding 可以是外层Grid的源上的字段}"/
                  DisplayMemberPath="Name" SelectedValuePath="EmpID"/>  
        <TextBlock Grid.Row="1" VerticalAlignment="Center" FontSize="18"   HorizontalAlignment="Center"  
Text="{Binding ElementName=cmb,Path=SelectedValue}"/>

 

 RelativeSource 属性,它通过与目标元素的关系获得相应的元素。RelativeSource的类型是RelativeSource,是一个标记扩展,有一下几种使用的方式:

1. 使源元素为目标元素本身

{Binding RelativeSource={RelativeSource self}}

2. 使源元素为目标元素的TemplatedParent属性

{Binding RelativeSource={RelativeSource TemplatedParent}}

3. 使源元素为最近的指定类型的父元素

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type desiredType}}}

4. 使源元素为n层最近的指定类型的父元素

{Binding RelativeSource={RelativeSource FindAncestor, AncestorLevel=n, AncestorType={x:Type desiredType}}}

5. 使源元素为之前的数据绑定集合中的数据项

{Binding RelativeSource={RelativeSource PreviousData}}

 

在RelativeSource 中使用Self是很方便的,因为这种模式可以把该元素的一个属性绑定到另一个属性上,但却不需要为元素指定名称,比如下面这个例子,Slider的ToolTip绑定了它自己的值:

<Slider ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Value}">

 -------------------------------------------------------------------------------------------------------------------

  • RelativeSource rs = new RelativeSource();  
  • rs.Mode = RelativeSourceMode.FindAncestor;  
  • rs.AncestorLevel = 1;  
  • rs.AncestorType = typeof(Grid);  
  •   
  • Binding binding = new Binding();  
  • binding.RelativeSource = rs;  
  • binding.Path = new PropertyPath("Name");  
  • textBox1.SetBinding(TextBox.TextProperty, binding);  
  • TextBox控件向外,从最近的第一层开始寻找,找到的第一个Grid对象的Name与TextBox控件绑定 AncestorLevel属性指的是以Binding目标控件为起点的层级偏移量
  • 与之等价的XAML代码是

  • Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type Grid}}, Path=Name}"  

 

转载于:https://www.cnblogs.com/whpepsi/archive/2013/05/25/3099395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值