Command="{Binding ConfirmRegisterCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self},Path=DataContext}"

一.FindAncestor

有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中放置一个文本控件,来显示父级控件的名称。
1、XAML
Html代码:
 <Grid x:Name="g1" Background="Red" Margin="10">
        <DockPanel x:Name="d1" Background="Orange" Margin="10">
            <Grid x:Name="g2" Background="Yellow" Margin="10">
                <DockPanel x:Name="d2" Background="LawnGreen" Margin="10">
                    <TextBox x:Name="textBox1" FontSize="24" Margin="10"/>
                </DockPanel>
            </Grid>
        </DockPanel>
    </Grid>

2、后台代码
Csharp代码 :
 RelativeSource rs = new RelativeSource(RelativeSourceMode.FindAncestor);
//设定为离自己控件最近的第二层父控件
 rs.AncestorLevel = 2;
//设定父控件为Gird类型
 rs.AncestorType = typeof(Grid);
//绑定源为Grid的名称
 Binding binding = new Binding("Name") { RelativeSource=rs};
//将绑定的源放在文本显示内容中
 this.textBox1.SetBinding(TextBox.TextProperty, binding);

3、以上后台代码等同于XAML中的
Html代码:
 <TextBox x:Name="textBox1" FontSize="24" Margin="10" Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Grid},AncestorLevel=2},Path=Name}"/>

二.TemplatedParent
TemplatedParent是RelativeSource的其中一种方式,使用该方式将使源元素成为模板目标类型—即TargetType;如果该绑定是在模板中,那么它的作为范围也只限于该模板.
例:
<Style TargetType="{x:Type local:TemplatedParent}">
        <Setter Property="Background" Value="Green"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:TemplatedParent}">
                    <Grid>
                        <Ellipse>
                            <Ellipse.Fill>
                                <SolidColorBrush Color="{Binding Path=Background.Color,RelativeSource={RelativeSource TemplatedParent}}"/>
                           </Ellipse.Fill>
                        </Ellipse>
                    </Grid>
                </ControlTemplate>
           </Setter.Value>
        </Setter>
    </Style>
这样绑定的源元素就指向local:TemplatedParent这个目标类型了,所以当你修改目标类型的背景颜色时,Ellipse也将跟随它变化。

三.Self
<Window x:Class="WpfApplication1.chap5_2"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="chap5_2" Height="300" Width="300">
    <Grid>
           <Slider Name="slider"
              Margin="4" Interval="1"
             TickFrequency="1"
             IsSnapToTickEnabled="True"
            Minimum="0" Maximum="100"
       ToolTip="{Binding RelativeSource ={ RelativeSource Self}, Path=Value}"/>
    </Grid>
</Window>
其中Binding RelativeSource={RelativeSource Self}等价于Binding RelativeSource={x:Static RelativeSource.Self}

 

最新文章

  1. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
  2. UI设计中px、pt、ppi、dpi、dp、sp之间的关系
  3. Codeforces Round #346 (Div. 2)E - New Reform(DFS + 好题)
  4. WebGrid Helper with Check All Checkboxes
  5. Html空格字符代码:
  6. js继承精益求精之寄生式组合继承
  7. 公司ERP系统重构那些事
  8. PAT (Basic Level) Practise:1009. 说反话
  9. [Mongo] 简单的操作命令
  10. 串口 COM口 USB-TTL RS-232 RS-485 不同标准 区别 释疑
  11. CentOS5下配置JDK1.6+TOMCAT6
  12. Android ImageButton | Button | TextView 点击和触摸效果
  13. 如何将Oracle安装为Linux服务
  14. 跨域访问之CORS
  15. 新知识:JQuery语法基础与操作
  16. 在JavaWeb项目中URL中字符串加密解密方案
  17. PEP8 - Python编码规范
  18. layui框架中关于table方法级渲染和自动化渲染之间的区别简单介绍
  19. spring security入门demo
  20. laravel with 渴求式加载指定字段

热门文章

  1. MySQL中锁的类型
  2. javascript实例:显示时间
  3. python面向对象(二)
  4. 江卓尔与比特币增发,谣言or先知-千氪
  5. JavaScript你所不知道的困惑(3)
  6. Armijo-Goldstein准则与Wolfe-Powell准则
  7. zabbix-2.4.8-1添加MySQL状态监控
  8. PyQt4 颜色选择,字体选择代码
  9. numpy的random模块详细解析
  10. OpenGL纹理上下颠倒翻转的三种解决办法