Silverlight中Binding属性RelativeSource

Silverlight UI原理:现代前端框架的底层设计源头 UI框架的核心在于响应式数据流与状态驱动视图的协同机制。从WPF/Silverlight时代沉淀下来的DependencyProperty、INotifyPropertyChanged、RoutedEvent和VisualState等设计,构成了React/Vue/Svelte中受控组件、事件委托、状态管理与声明式动画的底层范式。这些技术并非过时遗产,而是经过工业级验证的UI架构元模型——它解释了为何双向绑定需依赖属性变更通知、为何事件要分隧道/冒泡阶段、为何布局系统必须分离坐标计算与渲染逻辑。理解这些原理 阅读详情

本文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,0"/>
        <sdk:DataGrid Name="kiwiDataGrid" AutoGenerateColumns="False" Width="300" Height="200" VerticalAlignment="Top" Margin="0,80,0,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 4.0逆向解剖现代前端响应式原理 UI响应式机制是现代前端框架的核心基础,其本质源于对状态变更的感知、传播与视图同步的系统性设计。从WPF/Silverlight的DependencyProperty和INotifyPropertyChanged,到Vue3的Proxy劫持与React的Concurrent Rendering调度,底层都遵循‘数据变化→通知触发→更新队列→渲染同步’的技术链路。Silverlight 4.0作为首个完整支持TwoWay绑定与MVVM原生集成的轻量级XAML框架,以无封装、可调试、可断点的CLR+XAML双栈 阅读详情

相关推荐

软件各项会议评审意见模版

读梅老师主编的书,觉得评审意见模板很有参考价值和实用价值,帮梅老师安利一波,顺便记一下笔记。 《系统/子系统规格说明》评审意见模板 20XX年XX月XX日,XXX(主管机关)在XXX(会议地点)主持召开了“《XXX(产品名称)系统规格说明》评审会”。参加会议的有XXX机关,XXX院校,XXX研究所共XX名代表(名单见附件1),会议成立了评审组(名单见附件2),听取了XXX(单位)做的《XXXX报告》。经讨论质询,形成评审意见如下: 系统规格说明对系统的研制目标和范围、工作状态、运行方式以及所要满足的能力需

赵星汉同学的博客 1万+

WPF 使用RelativeSource绑定

WPF 使用RelativeSource绑定 在WPF绑定的时候,指定绑定源时,有一种办法是使用RelativeSource。 这种办法的意思是指当前元素和绑定源的位置关系。 第一种关系: Self 举一个最简单的例子:在一个StackPanel中,有一个TextBlock。 <TextBlock FontSize="18" FontWeight="Bold" Margin="10" Background="Red" Width="80" Height="{Binding RelativeSourc

韬光养晦 2209

教你搞懂RT-Thread的移植和配置ENV工具环境

RT-Thread的移植和配置ENV工具环境

Troubadour~的博客 8260

【wpf】ItemsControl 的Binding 小技巧

ItemsControl 非常常用和好用的控件,我经常将之用于配置界面! 比如这么一个配置界面: 整体是一个ItemsControl,每个子界面就是其中的一个Item。 ItemsControl 的ItemsSource 绑定到ParameterInfo 的集合 public ObservableCollection<ParameterInfo> configInfos { get; set; } = new ObservableCollection<Paramete

songhuangong123的博客 2478

【生物识别模组介绍】静脉识别模组

静脉识别技术是依据流动的静脉血液中的血红蛋白对近红外光有所吸收,通过近红外光照射手指、手掌、面部、腕部呈现的分布图像,再使用特定的算法对图像进行特征提取、分析比对,从而进行身份认证识别。静脉结构相同几率为34亿分之一,每个人的静脉结构具有独特性,而且静脉特征图像自成年后终身不变,不受外部环境、疾病等影响,是人体最稳定的生物特征之一。商务合作联系:newmagicmission@gmail.com图1.0。

upupDay's blog 899

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1875

WPF MVVM基础教程(五)RelativeSource属性绑定

RelativeSource 是一个标记扩展,扩展描述相对于绑定目标位置的绑定源位置。RelativeSource 作用是改变绑定指向的源,默认使用绑定的源是对应的DataContext对象中的属性,如果想要绑定源为其他元素,比如自身、其他父级控件、其他ViewModel,就需要用RelativeSource 进行标记。它表示在绑定表达式中引用另一个元素的属性。它使开发人员可以根据元素的位置和类型来查找绑定源。属性解释以模式获取或设置要查找的上级级别。使用 1 指示最靠近绑定目标元素的项。

海盗Sharp的博客 7748

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 757

WPF 入门教程RelativeSources

如何使用 StaticResources、DynamicResources 相互绑定属性,尽管您可以找到有关 RelativeSource 及其用例的信息,但即使在 Microsoft 文档中也没有更多详细信息。在本文中,我将公开 WPF 中 RelativeSources 的用例。 当我们尝试将给定对象的属性绑定到对象本身的另一个属性时,当我们尝试将对象的属性绑定到其相对父对象的另一个属性时,RelativeSource 是一种标记扩展,用于特定的绑定情况,在自定义控件开发的情况下以及最后在使用一系列绑

软件技术的专栏 4918

详细解释xilinx源语的使用:IDELAYE2和IDELAYE3

/ 完整的数据位对齐模块input wire dqs, // 数据选通input wire [7:0] dq_in, // 8位数据输入output wire [63:0] data_out // 并行数据输出// 延迟控制信号// 每个数据位都需要独立的IDELAYgenvar i;i < 8;// IDELAYE2实例.IDELAY_VALUE (10), // 初始值。

baidu_34971492的博客 433

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7065

XAML实例教程系列 - 标记扩展(Markup Extensions)

本人学习metro开发的过程中,首先需要学习xaml。在查找资料的过程中,发现银光中国论坛中的一个系列教程写的不错,现在转载过来。原创地址:http://www.silverlightchina.net/html/tips/2012/0514/15908.html   作为描述性语言,XAML使用对象元素声明和其属性调用实现不同操作。在实际项目开发中XAML为控件属性赋值,经常会遇到设计时属性

uestchl的专栏 450

Docker安装并运行AnythingLLM的详细教程

通过本文的介绍,你已经掌握了如何在 CentOS 系统上使用 Docker 安装并运行 AnythingLLM。AnythingLLM 提供了强大的功能,支持本地知识库搭建和多模态输入,非常适合个人和企业使用。希望本文能帮助你快速上手并搭建自己的 AI 知识库。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 5837

XAML实例教程系列 - 标记扩展(Markup Extensions) 六

XAML实例教程系列 - 标记扩展(Markup Extensions) 分类:Windows 8Silverlight2012-06-21 13:001139人阅读评论(0)收藏举报 扩展bindingdatatemplatesilverlighttextboxwindows 作为描述性语言,XAML使用对象元素声明和其属性...

weixin_30300523的博客 81

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

浅析WPF与Silverlight的关键区别

Silverlight刚诞生时,很多人只是简单的理解它为Flash的竞争对手。但是随着微软的进一步工作,Silverlight的应用范围越来越广泛,甚至很多人将它与WPF混为一谈。本文将为大家细细道来。 当WPF和Silverlight越来越受到.NET开发人员重视的时候,两者间的界限也越来越模糊。回顾六月,Wintellect发布了鲜为人知但极其重要的“微软WPF和Silverlight之

sam1012的专栏 554

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Windows Phone 7程序设计》样章-《数据绑定》

在我看来数据绑定是XAML类程序(WPF,Silverlight,WP7,Windows8)最最关键的概念,也是MVVM模式的基础,如果一位开发者在开发XAML类程序时并没有用上数据绑定,那么我觉得他/她还没有掌握开发XAML类程序的能力。数据绑定可以说每个XAML类程序开发者必须掌握的基本技能之一。下面是《数据绑定》样章的一部分,如果觉得翻译的不错而且条件许可,请购买正版书,谢谢您为中国文化事业...

weixin_33725272的博客 99

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Silverlight Binding

Binding除了默认构造函数外,还有一个可以传入Path的构造函数,下面两种方式实现的功能是一样的。                     Text="{Binding ElementName=treeView, Path=SelectedItem.Header}"                     Backgroud="AliceBlue" FontSize="16" />

我在努力,一直都在努力。 3019

稳扎稳打Silverlight(40) - 3.0绑定之Element to Element Binding, RelativeSource; 样式之动态修改样式, 样式继承, 自定义光标

[索引页][源码下载]稳扎稳打Silverlight(40) - 3.0绑定之Element to Element Binding, RelativeSource; 样式之动态修改样式, 样式继承, 自定义光标作者:webabcd介绍Silverlight 3.0 绑定的新增功能,样式相关的新增功能 Element to Element B

webabcd的专栏 715

Implementing RelativeSource binding in Silverlight

February 27th, 2009 by Colin Eberhardt1tweetIn my previous post I demonstrated how an the WPF ElementName style binding can be emulated with Silverlight via an attached behaviour. As a brief recap, th...

weixin_33938733的博客 114

稳扎稳打Silverlight(40) - 3.0绑定之Element to Element Binding, RelativeSource

[索引页] [源码下载]稳扎稳打Silverlight(40) - 3.0绑定之Element to Element Binding, RelativeSource; 样式之动态修改样式, 样式继承, 自定义光标 作者:webabcd介绍Silverlight 3.0绑定的新增功能,样式相关的新增功能 Element to Element Bindi...

weixin_33744854的博客 143

在WP7下自定义RelativeSource 的Binding

最近老没有时间上来写博文。今天有空来写写上次还没有说完的话题。上一篇提到说说我在WP7应用开发中遇到的 子控件 DataTemplete 中的按钮的命令绑定,刚开始接触似乎是个头疼的问题。那怎么解决呢? 我们仔细想想 silverlight 就是一个庞大的Composite组合模式的实现。包括了我们所说的可视树。不管怎么加Templete,怎么绑定,最终会出现在可视树上。 好就这么探索去吧。。 ...

weixin_30919919的博客 117

Silverlight底层原理:DependencyObject与XAML编译机制解析

UI框架中的依赖属性(DependencyProperty)是实现数据绑定、样式继承与动画控制的核心基础设施;XAML并非简单标记语言,而是编译期对象图序列化协议。其背后基于DependencyObject的三层哈希属性存储模型、TemplateBinding的轻量绑定机制、以及StaticResource/DynamicResource的作用域治理逻辑,构成了现代.NET UI框架(如WPF、Avalonia、.NET MAUI)的底层范式。理解这些原理,能显著提升对DataTemplate、Visual

547
上一篇: Silverlight中使用DomainDataSource模拟Duplex通信
下一篇: 使用Rake构建多种编程语言
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值