Silverlight中Binding属性RelativeSource

Silverlight中Binding属性RelativeSource,第1张

概述本文github:https://github.com/kiwiwin/silverlight-demo,文件夹:domain-service-duplex-by-auto-refresh-demo RelativeSource可以用来指定binding的source和binding的target之间的位置关系。   RelativeSource的三种模式: 1.Self模式 目标元素应用作此绑定

本文github:https://github.com/kiwiwin/silverlight-demo,文件夹:domain-service-duplex-by-auto-refresh-demo


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

<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"             x:Class="binding_to_relative_source.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300"             d:DesignWIDth="400">    <GrID x:name="LayoutRoot" Background="White">        <button Content="Change" Click="Changebutton_OnClick" WIDth="300" Height="30" VerticalAlignment="top"/>        <button Content="Test" IsEnabled="{Binding State}" WIDth="300" Height="30" VerticalAlignment="top" margin="0,40,0"/>        <sdk:DataGrID name="kiwIDataGrID" autoGenerateColumns="False" WIDth="300" Height="200" VerticalAlignment="top" margin="0,80,0">            <sdk:DataGrID.Columns>                <sdk:DataGrIDTextColumn Binding="{Binding name}" WIDth="150"/>                <sdk:DataGrIDTemplateColumn>                    <sdk:DataGrIDTemplateColumn.CellTemplate>                        <DataTemplate>                            <button Content="Dummy button" IsEnabled="{Binding State,relativeSource={relativeSource AncestorType=UserControl}}"/>                        </DataTemplate>                    </sdk:DataGrIDTemplateColumn.CellTemplate>                </sdk:DataGrIDTemplateColumn>            </sdk:DataGrID.Columns>        </sdk:DataGrID>    </GrID></UserControl>

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<Kiwi>();            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


总结

以上是内存溢出为你收集整理的Silverlight中Binding属性RelativeSource全部内容,希望文章能够帮你解决Silverlight中Binding属性RelativeSource所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存