zoukankan      html  css  js  c++  java
  • WPF---数据绑定之RelativeSource(五)

    一、概述

    当Binding有明确的数据来源的时候,我们可以用Source或者ElementName赋值的办法让Binding与之关联。

    但是,有时候当我们不能确定作为Source的对象叫什么名字的时候,但我们知道它与作为Binding目标的对象在UI布局上的对应关系的时候,我们就

    需要使用Binding的RelativeSource属性了。

    二、例子

    以下例子演示了使用Binding的RelativeSource属性来绑定父级容器的Name属性以及控件本身的Name属性。

     1 <Window x:Class="BindingDemo3XmlDataSource.MainWindow"
     2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     6         xmlns:local="clr-namespace:BindingDemo3XmlDataSource"
     7         mc:Ignorable="d"
     8         Title="BindingDemo3RelativeSource" Height="350" Width="525">
     9     <Grid x:Name="g1" Margin="10" Background="Red">
    10         <DockPanel x:Name="d1" Margin="10" Background="Pink" >
    11             <Grid x:Name="g2" Margin="20" Background="Green" >
    12                 <DockPanel x:Name="d2" Margin="10" Background="PaleVioletRed" >
    13                     <Grid x:Name="g3" Margin="10" Background="Red">
    14                         <Grid x:Name="g4" Margin="10" Background="Green">
    15                             <Grid.RowDefinitions>
    16                                 <RowDefinition Height="*"/>
    17                                 <RowDefinition Height="*"/>
    18                                 <RowDefinition Height="*"/>
    19                             </Grid.RowDefinitions>
    20                             <TextBox Background="AliceBlue" 
    21                                      Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=4,AncestorType={x:Type Grid}}, Path=Name}"
    22                                      FontSize="22" FontWeight="Bold" TextAlignment="Center">
    23                                      
    24                                 
    25                             </TextBox>
    26                             <TextBox Grid.Row="1" Background="Silver"
    27                                      Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType={x:Type DockPanel}}, Path=Name}"
    28                                      FontSize="22" FontWeight="Bold" TextAlignment="Center">
    29                                 
    30                             </TextBox>
    31                             <TextBox Grid.Row="2" Background="AliceBlue" Name="TextBox1"
    32                                      Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Name}"
    33                                      FontSize="22" FontWeight="Bold" TextAlignment="Center">
    34 
    35                             </TextBox>
    36                         </Grid>
    37                     </Grid>
    38                 </DockPanel>
    39             </Grid>
    40         </DockPanel>
    41     </Grid>
    42 </Window>
    View Code

    部分等价的C#代码参考以下:

           RelativeSource rs = new RelativeSource();
                rs.Mode = RelativeSourceMode.Self;
                Binding binding = new Binding("Name") {RelativeSource = rs };
                this.TextBox1.SetBinding(TextBox.TextProperty, binding);

    结果如下:

  • 相关阅读:
    css 重新学习系列(1)
    sublime Text 使用
    值得收藏的前端大牛博客
    javascript中最常用的方法
    ie6,ie7兼容性总结
    jQuery学习笔记(二)
    jQuery学习笔记(一)
    php smarty
    javascript DOM(2) 一个网页上切换显示不同的图片或文本
    effective c++ 8: Prevent exceptions from leaving destrctors
  • 原文地址:https://www.cnblogs.com/3xiaolonglong/p/9766356.html
Copyright © 2011-2022 走看看