首页 > 其他分享 >WPF教程(四)RelativeSource属性

WPF教程(四)RelativeSource属性

时间:2023-06-05 22:35:40浏览次数:54  
标签:控件 教程 绑定 偏移量 RelativeSource AncestorType WPF Bingding

我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利用Bingding的RelativeSource进行绑定,这种办法的意思是指当前元素和绑定源的位置关系。

(1)控件关联自身的属性——Self

 

<Window x:Class="RelativeSource.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <TextBox Height="30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=self},Path=Name }"/>
        </StackPanel>
    </Grid>
</Window>

上例是前台xaml写法,再看下后台怎么实现:

public MainWindow()
{
    InitializeComponent();
    System.Windows.Data.RelativeSource rs = new System.Windows.Data.RelativeSource();
    rs.Mode = RelativeSourceMode.Self;
    Binding binding = new Binding("Name") { RelativeSource = rs };
    this.Box1.SetBinding(TextBox.TextProperty, binding);
}

 

(2)控件关联其父级容器的属性——AncestorType

<Window x:Class="RelativeSource.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="G1">
        <Grid Name="G2">
            <StackPanel Name="S1">
                <TextBox Height="30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=2},Path=Name }"/>
            </StackPanel>
        </Grid>
    </Grid>
</Window>

详细介绍下AncestorLevel,它指的是以Bingding目标控件为起点的层级偏移量,S1的偏移量是1,G2的偏移量是2,G1是偏移量3,AncestorType指的是要找的目标对象的类型。值得注意的是AncestorLevel必须参考AncestorType使用,如上面设置了AncestorType={x:Type Grid},则Bingding在寻找时会忽略非Grid的控件,此时G2的偏移量是1,G1的偏移量是2,StackPanel被忽略。

(3)控件关联模板的属性——TemplatedParent

 

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Green"/>
            <Setter Property="Template">              
                <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Ellipse>
                            <Ellipse.Fill>
                                <SolidColorBrush Color="{Binding Path=Background.Color,RelativeSource={RelativeSource TemplatedParent}}"/>
                            </Ellipse.Fill>
                        </Ellipse>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

总结

从运用性上介绍了RelativeSource三种使用方法,目前就碰到三种,有新的会继续更。知识是没有边界的,不断地探知即为知识来源,取之不竭、用之不尽。刚刚新开项目,安排了不少任务,有时间再写。

 



标签:控件,教程,绑定,偏移量,RelativeSource,AncestorType,WPF,Bingding
From: https://blog.51cto.com/u_4018548/6420095

相关文章

  • WPF自学入门(四)WPF路由事件之自定义路由事件
      在上一篇博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自定义路由事件。接下来我们一起来看一下WPF中的自定义路由事件怎么进行创建吧。创建自定义路由事件分为3个步骤:1、声明并注册路由事件。2、利用CLR事件包装路由事件(封装路由事件)。3、创建可以激发路由......
  • Vue3 setup语法糖下的axios全局设置教程
    Vue3setup语法糖下的axios全局设置教程前言在Vue3的组件式API开发下,this关键词不再适用,网上很多配置axios教程都是以Vue2为基础的,在Vue3下不再适用。近期尝试用组件式API风格写项目,在配置全局axios就遇到了这个问题。经过我反复尝试,查阅官网的文档,终于有了以下解决方法:Vue2......
  • 苹果MacOS系统傻瓜式本地部署AI绘画Stable Diffusion教程
    StableDiffusion的部署对小白来说非常麻烦,特别是又不懂技术的人。今天分享两个一键傻瓜式安装包,对小白来说非常有用。下面两个任选一个安装就可以。一、DiffusionBee简单介绍DiffusionBee是基于stablediffusion的一个安装包,有图形界面,直接安装就能使用,安装完成后会自行下载两......
  • 【转】好的教程/网站
    一、好的教程Vue+SpringBoot项目实战(简陋的带后台的门户网站) 二、值得参考的项目成电本科推优毕设-ACM集训队管理系统 ......
  • wpf 自定义 RadioButton.
    <StyleTargetType="RadioButton"x:Key="nav"><SetterProperty="Template"><Setter.Value><ControlTemplateTargetType="RadioButton">......
  • [原]Wpf应用Path路径绘制圆弧
    1. 移动指令:MoveCommand(M):M起始点 或者:m起始点比如:M100,240或m100,240使用大写M时,表示绝对值;使用小写m时;表示相对于前一点的值,如果前一点没有指定,则使用(0,0)。2. 绘制指令(DrawCommand):我们可以绘制以下形状:(1)直线:Line(L)(2)水平直线:Horizontalline(H)(3)垂......
  • wpf 绘图
                       ......
  • 最新Mysql与Navicat下载安装教程
    MySQL安装步骤1、下载MySQL2、安装MySQL3、MySQL的基本使用1、下载MySQL我们先进入MySQL官网,下载MySQL的官方安装包。(网址:http://www.mysql.com)官网首页:点击downloads点击“MySQLCommunity(GPL)Downloads»”点击“MySQLInstallerforWindows”。(我们这里讲的是windows......
  • Tmux 使用教程
    1,Tmux使用教程Tmux使用教程-阮一峰的网络日志(ruanyifeng.com) Tmux是一个终端复用器(terminalmultiplexer),非常有用,属于常用的开发工具。本文介绍如何使用Tmux。一、Tmux是什么?1.1会话与进程命令行的典型使用方式是,打开一个终端窗口(terminalwindow,以下简称"窗......
  • 仙境传说RO:添加地图传送门教程
    仙境传说RO:添加地图传送门教程大家好我是艾西,上一篇文章中我跟大家分享了仙境传说RO怎么添加NPC,NPC可以加入自己想要售卖的装备物品等。那么对于玩家跑地图需要手动跑肯定是不方便的毕竟大家玩游戏就是为了娱乐以及放松,那么今天艾西教大家怎么在仙境传说服务端添加地图传送门。地图......