wpf RelativeSource绑定

yizhihongxing

RelativeSource有四种类型

Self

FindAncestor

TemplatedParent

PreviousData

 

a.Self

Self用于绑定源和绑定目标相同的场景中。对象的一个属性与同一对象的另一个属性绑定。

例如,让我们取一个高度和宽度相同的椭圆。在XAML文件中添加下面给出的代码。宽度属性与高度属性相对绑定。

<Grid>
    <Ellipse Width="{Binding RelativeSource={RelativeSource Self}, Path=Height}"
             Height="100"
             Fill="Black" />
</Grid>

 

b.FindAncestor

FindAncestor
顾名思义,当绑定源是绑定目标的祖先(父级)之一时使用此选项。使用FindAncestor扩展,可以找到任何级别的祖先。
             

现在,让我们使用FindAncestor扩展将祖先的Name属性绑定到子元素button的Content属性。

<Grid Name="Parent_3">
    <StackPanel Name="Parent_222"
                Width="100"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
        <StackPanel Name="Parent_2"
                    Width="100"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center">
            <Border Name="Parent_1">
                <StackPanel x:Name="Parent_0"
                            Orientation="Vertical">
                    <!--  下面这个按钮Content得到:Parent_2  -->
                    <Button Height="50"
                            Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}, AncestorLevel=2}, Path=Name}" />
                    <!--  下面这个按钮Content得到:Parent_0  -->
                    <Button Height="50"
                            Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}, AncestorLevel=1}, Path=Name}" />
                    <!--  下面这个按钮Content得到:Parent_0  -->
                    <Button Height="50"
                            Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=Name}" />
                </StackPanel>
            </Border>
        </StackPanel>
    </StackPanel>
</Grid>

 

c.TemplatedParent

TemplatedParent是一个属性,它使您能够创建一个包含少量未知值的控件模板。这些值取决于应用ControlTemplate的控件的属性。

    <Window.Resources>
        <ControlTemplate x:Key="template1">
            <!--
                在应用模板时,按钮的Background(Beige)与椭圆的Fill属性相对绑定,Content(Click me)与ContentPresenter的Content属性相对绑定。依赖值生效并给出以下输出。
            -->
            <Canvas>
                <Ellipse Width="155"
                         Height="110"
                         Fill="Black" />
                <Ellipse Width="150"
                         Height="100"
                         Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" />
                <ContentPresenter Margin="35"
                                  Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" />
            </Canvas>
        </ControlTemplate>
    </Window.Resources>
<Button Height="0"
                        Margin="5"
                        Background="Beige"
                        Content="Click me"
                        FontSize="18"
                        Template="{StaticResource template1}" />

 

d.PreviousData

PreviousData这个用得很少,表示值相对于以前数据的变化。

 

最终效果图

wpf RelativeSource绑定

 

 

文章导航
  1. https://github.com/aierong/WpfDemo (自我Demo地址)

 

原文链接:https://www.cnblogs.com/aierong/p/17303019.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:wpf RelativeSource绑定 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • VC创建进程CreateProcess的方法

    VC创建进程CreateProcess的方法需要以下几步: 1. 引用头文件和命名空间 在使用CreateProcess方法前需要在工程中引入Windows.h头文件,并在代码中调用Windows命名空间。 #include <Windows.h> using namespace std; 2. 定义参数和启动信息 我们需要定义以下几个参数: l…

    C# 2023年5月31日
    00
  • C#编程获取各种电脑硬件信息的方法示例

    C#是一种流行的面向对象编程语言,可以获取电脑硬件信息,并且是比较容易实现的。下面,我将分享一些示例代码,用以获得各种电脑硬件信息的方法。 硬件信息获取方法一:使用System.Management命名空间 System.Management命名空间提供了一种获取WMI(Windows Management Instrumentation)服务的方法,该服务…

    C# 2023年6月7日
    00
  • C# HttpClient 如何使用 Consul 发现服务

    C# HttpClient如何使用Consul发现服务 Consul是一种服务发现和配置工具,可以用于在分布式系统中注册、发现和配置服务。C# HttpClient可以使用Consul来发现服务,以便在分布式系统中进行通信。本文将提供详细的“C# HttpClient如何使用Consul发现服务”的完整攻略,包括如何使用Consul来发现服务,以及示例代码。…

    C# 2023年5月15日
    00
  • C#正则表达式(Regex类)用法实例总结

    针对“C#正则表达式(Regex类)用法实例总结”,我整理了以下的完整攻略: 1. 正则表达式(Regex)的概念 正则表达式,也称为 regex(常量),指的是一种编写模式的字符序列,这个模式用于匹配一个或多个文本字符串。 Regex 类是 .NET Framework 提供的正则表达式处理类,可以通过该类来实现在一个字符串中搜索、替换和验证操作的功能。 …

    C# 2023年6月7日
    00
  • C#中常用的IO操作介绍

    C#中常用的IO操作介绍 C#中提供了一套强大的IO库,方便进行文件读写和其他IO操作。本篇文章将为您简要介绍几种C#中常用的IO操作。 文件读写 读取文件 使用System.IO.File类可以读取文件。下面是一个简单的示例,它从文件中读取一些文本然后将其输出到控制台。 using System; using System.IO; class Progra…

    C# 2023年6月1日
    00
  • C#中explicit与implicit的深入理解

    C#中的explicit(显式转换)和implicit(隐式转换)主要是用来进行类型转换的。下面我将详细讲解这两种类型转换的深入理解以及使用示例。 显式转换 explicit 显式转换也就是强制类型转换,可以将整型强制转换为浮点型,或者可以将长整型转换为整型等等。显式转换需要使用类型转换运算符,可以直接把一个数据类型转换成另外一个数据类型,但如果转换时发生精…

    C# 2023年5月15日
    00
  • C#中文件名或文件路径非法字符判断方法

    当我们在使用C#编程的时候,经常会遇到需要判断文件名或文件路径是否包含非法字符的情况。本文将介绍C#中文件名或文件路径非法字符的判断方法。 判断非法字符的常规方法 C#中提供了一种常规的方法来判断文件名或文件路径是否包含非法字符: var illegalChars = System.IO.Path.GetInvalidFileNameChars(); boo…

    C# 2023年6月1日
    00
  • C#实现将32位MD5摘要串转换为128位二进制字符串的方法

    要将32位MD5摘要串转换为128位二进制字符串,可以使用以下方法: 将32位MD5摘要串转换为字节数组(一般是长度为16的字节数组)。 将字节数组转换为128位二进制字符串。具体方法是将每个字节转换为8位二进制字符串,然后将所有字节的8位字符串连接起来即可。 以下是C#实现的代码: using System; using System.Security.C…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部