必威体育Betway必威体育官网
当前位置:首页 > IT技术

WPF教程(四)RelativeSource属性

时间:2019-09-28 06:45:45来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

relativesource

我们进行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三种使用方法,目前就碰到三种,有新的会继续更。知识是没有边界的,不断地探知即为知识来源,取之不竭、用之不尽。刚刚新开项目,安排了不少任务,有时间再写。

相关阅读

WPF中的文字修饰——上划线,中划线,基线与下划线

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,

WPF-StackPanel面板

StackPanel Orientation属性Orientation属性决定SatckPanel中元素的排列方向,默认为垂直排列 Orientation=“Vertical”<Window x:

WPF知识点--渐变色(LinearGradientBrush、GradientSto

https://www.cnblogs.com/kuangxiangnice/p/5820631.html

WPF之布局属性HorizontalAlignment、HorizontalConten

WPF中调整控件相对位置的属性有很多,比较常见的属性比如:HorizontalAlignment、HorizontalContentAlignment、VertialAlignment、Ve

Word:无法启动转换器WPFT532 WPFT632 解决方法

出处:http://www.honpi.com/support/systemOS/2020129174061.html 自己并没有下载Office文件转换器工具包, 进入C:\Program Files

分享到:

栏目导航

推荐阅读

热门阅读