wpf RelativeSource绑定

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日

相关文章

  • PowerShell查看Windows功能选项的方法

    PowerShell查看Windows功能选项的方法 在PowerShell中,我们可以使用Get-WindowsOptionalFeature cmdlet命令来查看Windows功能选项。本文将提供详细的“PowerShell查看Windows功能选项的方法”的完整攻略,包括如何使用Get-WindowsOptionalFeature命令,以及两个示例。…

    C# 2023年5月15日
    00
  • Visual C#中如何使用IComparable和IComparer接口

    Visual C# 中使用 IComparable 和 IComparer 接口的主要作用是用于比较数据类型之间的差异,比如对象是否相等等。这两个接口都是用于排序数据类型的,IComparable 是接口用于实现单个数据类型的排序,IComparer 适用于实现对多个数据类型的排序。以下是在 Visual C# 中使用这两个接口的方法: 使用 ICompar…

    C# 2023年6月6日
    00
  • asp.net core 修改默认端口的几种方法

    在ASP.NET Core中,可以通过多种方式修改默认端口。在本攻略中,我们将讨论几种修改默认端口的方法,并提供两个示例说明。 方法一:使用launchSettings.json文件 在ASP.NET Core中,可以使用launchSettings.json文件来配置应用程序的启动设置。以下是使用launchSettings.json文件修改默认端口的步骤…

    C# 2023年5月17日
    00
  • C#中线程同步对象的方法分析

    请看下面的详细讲解。 C#中线程同步对象的方法分析 在多线程编程中,线程同步是必不可少的一部分。C#中提供了多种线程同步对象,本文将对这些对象的使用方法进行分析。 1. ManualResetEvent ManualResetEvent用于在线程间进行信号传递。通常情况下,线程A等待线程B完成某个操作后再进行下一步操作,这时候线程B需要向线程A发信号。Man…

    C# 2023年5月15日
    00
  • C# WinForm实现自动更新程序之客户端的示例代码

    好的!本文将详细讲解“C# WinForm实现自动更新程序之客户端的示例代码”的完整攻略,包括以下内容: 前置知识 客户端代码示例 示例说明 前置知识 在讲解“C# WinForm实现自动更新程序之客户端的示例代码”之前,需要掌握一些前置知识: C#语言的基础语法 WinForm应用程序的基础知识 HTTP协议的基本原理及其在.NET中的应用 XML文档的基…

    C# 2023年6月1日
    00
  • .net6 在中标麒麟下的安装

    尝试了下.net6在信创环境下的安装和部署 信创服务器,CPU:ARM64,操作系统:中标麒麟 v10,网络环境:政务网(无法连接外网) 1、下载 .net 6 SDK 6.0.408 Arm64二进制文件。https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0 2、在服务器/home目录下创建两个新目录…

    C# 2023年4月22日
    00
  • C#表达式树讲解

    C# 表达式树讲解 在 C# 中,表达式树(Expression Tree)是一个类似于代码的树形数据结构,可以表示出一个语法树、一个 lambda 表达式、一个 LINQ 查询等等。 表达式树是由表达式节点构成的,每个节点代表一个表达式或语句。 表达式树的语法 表达式树和 C# 中的 lambda 表达式比较类似,都是由参数、箭头符号和表达式组成。例如以下…

    C# 2023年6月1日
    00
  • C#先判断是否存在再创建文件夹或文件与递归计算文件夹大小

    下面是关于“C#先判断是否存在再创建文件夹或文件与递归计算文件夹大小”的详细攻略。 1. 先判断是否存在再创建文件夹或文件 在C#中,我们可以使用System.IO.Directory和System.IO.File类来创建文件夹或文件,并且可以通过相应的方法,判断是否存在。 1.1 判断文件夹是否存在并创建文件夹 如果我们需要判断一个文件夹是否存在,并在不存…

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