博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight中Binding属性RelativeSource
阅读量:4678 次
发布时间:2019-06-09

本文共 2279 字,大约阅读时间需要 7 分钟。

本文github:,文件夹:

RelativeSource可以用来指定binding的source和binding的target之间的位置关系。

 

RelativeSource的三种模式:

1.Self模式

目标元素应用作此绑定的源。当要将元素的一个属性绑定到同一元素的另一个属性时,上述这点很有用。

<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

2.TemplatedParent模式

在其中应用 ControlTemplate 的控件是此绑定的源。这一点可用来在模板级别应用绑定中的验证错误信息。

<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

3.FindAncestor模式

无论何时使用FindAncestor模式,通常会指定AncestorType的值。如果树遍历中存在多义性,可指定一个AncestorLevel。

<object property="{Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=typeNameString, AncestorLevel=levelInt} ...}" .../>

备注:

在绑定中,Source、RelativeSource 和 ElementName是相互排斥的。如果已设置这些属性中的一种,则在绑定中设置其他两种属性的任何一种(通过 XAML 或代码)将导致异常。

 

例:

我们期望datagrid中的template column中的Button随着State的改变而改变是否为Enabled,同时对比datagrid外的一个Test Button在binding时与datagrid中的button的区别

 

MainPage.xaml

   
       
       
       
           
               
               
                   
                       
                           
                       
                   
               
           
       
   

MainPage.xaml.cs

public partial class MainPage : UserControl, INotifyPropertyChanged    {        public bool State { get; set; }        public event PropertyChangedEventHandler PropertyChanged;        public void NotifyPropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }        public MainPage()        {            InitializeComponent();            DataContext = this;            var kiwis = new List
(); kiwis.Add(new Kiwi {Name = "a"}); kiwis.Add(new Kiwi {Name = "b"}); kiwis.Add(new Kiwi {Name = "c"}); kiwis.Add(new Kiwi {Name = "d"}); kiwiDataGrid.ItemsSource = kiwis; State = true; } private void ChangeButton_OnClick(object sender, RoutedEventArgs e) { State = !State; NotifyPropertyChanged("State"); } } public class Kiwi { public String Name { get; set; } }

 

运行效果:

 Enabled

 

Disable

转载于:https://www.cnblogs.com/java20130722/archive/2012/12/02/3206850.html

你可能感兴趣的文章
一些小例子
查看>>
WebSocket4Net 0.5发布
查看>>
转 Winmail 退信分析大全 (2012,05,02 更新)
查看>>
499 单词计数 (Map Reduce版本)
查看>>
python笔记
查看>>
2、openSession和getCurrentSession方法的区别
查看>>
msgbox.js的修改使在iframe的可视区域显示
查看>>
a、b交换
查看>>
[SDOI2015]序列统计
查看>>
LaTeX技巧892: Ubuntu 安装新版本TeXLive并更新
查看>>
昨天用的流量有点多60M
查看>>
kafka中的消费组
查看>>
用SDWebImage加载FLAnimatedImage
查看>>
Linux中常用操作命令
查看>>
asp.net core使用gzip
查看>>
野指针产生
查看>>
Java replace & replaceAll
查看>>
ios8--加载图片
查看>>
netty3---传统IO,NIO,nettyIO
查看>>
js--09定时器
查看>>