博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF中的Binding技巧(二)
阅读量:5082 次
发布时间:2019-06-13

本文共 2340 字,大约阅读时间需要 7 分钟。

   接上篇,

     我们来看一看Elementname,Source,RelativeSource 三种绑定的方式

     1.ElementName顾名思义就是根据Ui元素的Name来进行绑定:

     例子:

     <Window x:Name="MainWindow">

         <Grid>

               <Button Background=”{Binding ElementName=MainWindow, Path=Background}”/>
         </Grid>

     </Window>

     效果等同于

     <Window>

         <Grid>

               <Button Background=”{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window},Path=Background}”/>
         </Grid>

     </Window>

     区别:

         ElementName属性用于引用一个UI对象的名称,其的作用域在同一XAML文件内,不能引用另一XAML文件的某个Ui元素名。

  

     2.Source属性用于指定对象绑定路径的引用。 其特点是:Source属性通常用于绑定设置的对象时,是已知的。

 

     <Window x:Name="MainWindow">

         <Grid>

               <Button Background=”{Binding Source={StaticResource ButtonStyle}}”/>
         </Grid>

     </Window>

 

     3.RelativeSource

     在不确定绑定的Source时,但知道与绑定对象两者相对关系时就需要使用RelativeSource,这也是RelativeSource 与ElementName和Source的最大区别。

     RelativeSource 的三种典型用法:

     /1.UI元素的一个属性绑定在自身的另一个属性上

     <Label Background = {Binding Path=Forgroud, RelativeSource={RelativeSource Self}} />

     /2.UI元素的一个属性绑定在某个父元素的属性上

     <Grid>

          <Label Background = {Binding Path=Background, RelativeSource={RelativeSource AncestorType={x:Type Grid}}}/>

     </Grid>

     /3.Template中的元素的属性绑定在Template使用者元素的属性上

    

     {Binding Path=PathToProperty, RelativeSource={RelativeSource TemplatedParent}}

     例子: 

<Style TargetType="{x:Type local:NumericUpDown}">

  <Setter Property="HorizontalAlignment" Value="Center"/>
  <Setter Property="VerticalAlignment" Value="Center"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type local:NumericUpDown}">
        <Grid Margin="3">
          <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
          </Grid.ColumnDefinitions>
          <Border BorderThickness="1" BorderBrush="Gray"
                  Margin="2" Grid.RowSpan="2"
                  VerticalAlignment="Center" HorizontalAlignment="Stretch">

            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}"

                       Width="60" TextAlignment="Right" Padding="5"/>
          </Border>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

     利用TemplateBinding 绑定模板与原对象之间的属性

     {TemplateBinding Path=PathToProperty}

      例子:

  <ControlTemplate TargetType="{x:Type Button}"  x:Key="buttonTemp">                        

       <Border BorderThickness="3" Background="{TemplateBinding Foreground}">                  
           <TextBlock Foreground="{TemplateBinding Background}"/>                   
        </Border>                      
 </ControlTemplate> 

 

      转载时,请注明本文来源:

   

  作者: 淘米部落

      mail:

转载于:https://www.cnblogs.com/tmywu/archive/2012/08/06/2624798.html

你可能感兴趣的文章
让QT支持中文的方法
查看>>
dos批处理知识
查看>>
多文档界面的实现(DotNetBar的superTabControl)
查看>>
3.字符串
查看>>
关于深复制与浅复制
查看>>
js 重写a标签的href属性和onclick事件
查看>>
关于需要授权处理获取数据的跳转
查看>>
17Web服务器端控件
查看>>
历年春节日期
查看>>
关于消除MySQL输入错误后的警报声
查看>>
eventBus的使用
查看>>
新开的博客先和大家打个招呼吧!
查看>>
小工具系列之json查看小工具
查看>>
Java记录
查看>>
Ajax-08 跨域获取最新电视节目清单实例
查看>>
运算符表达式
查看>>
unity-------------------Unity5.X 新版AssetBundle使用方案及策略
查看>>
Django学习之表单(forms)
查看>>
HDU 3081 Marriage Match II(二分法+最大流量)
查看>>
CSS画出三角形(利用Border)
查看>>