天天看點

RelativeSource.TemplatedParent 屬性wpf

今天看到這一句代碼時候,自己隻是知道綁定了,可是不知道綁定了什麼啊

就去查了一下,後來說的好像是綁定的TemplateParent傳回的 一個值。可是這是為什麼呢,

有的說是綁定的是一個資源。

下面有一個例子

下面的示例顯示名為 NumericUpDown 的自定義控件的 Style 定義。将 TextBlock 的 Text 屬性綁定到對象 TemplatedParent 的 Value,在此情況下即應用了此 Style 的 NumericUpDown 控件。

<!--ControlTemplate for NumericUpDown that inherits from
    Control.-->
<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>

          <RepeatButton Command="{x:Static local:NumericUpDown.IncreaseCommand}"  
                        Grid.Column="1" Grid.Row="0">Up</RepeatButton>

          <RepeatButton Command="{x:Static local:NumericUpDown.DecreaseCommand}"
                        Grid.Column="1" Grid.Row="1">Down</RepeatButton>

        </Grid>

      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
           

TemplateBindingExtension 類

實作一個标記擴充,該标記擴充支援在模闆中屬性的值和模闆化控件上某個其他公開的屬性的值之間進行綁定。

下面的示例示範 ControlTemplate,它定義一個水準放置且具有圓角的 ListBox。TemplateBinding 指定 Border 的 Background 應與 ListBox 上設定的 Background 值同步。如果想要使控件使用者能夠控制某些屬性的值,可以在 ControlTemplate 中使用 TemplateBinding

C#

<Style TargetType="ListBox">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBox">
        <Border CornerRadius="5" Background="{TemplateBinding ListBox.Background}">
          <ScrollViewer HorizontalScrollBarVisibility="Auto">
            <StackPanel Orientation="Horizontal"
                       VerticalAlignment="Center"
                       HorizontalAlignment="Center"
                       IsItemsHost="True"/>
          </ScrollViewer>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
           

下面的示例示範 Label 控件的 ControlTemplate。HorizontalAlignment 和 VerticalAlignment 屬性綁定到此 ControlTemplate 所應用于的 Label 控件的 HorizontalContentAlignment 和 VerticalContentAlignment 屬性的值。

C#

<Style x:Key="{x:Type Label}" TargetType="Label">
  <Setter Property="HorizontalContentAlignment" Value="Left"/>
  <Setter Property="VerticalContentAlignment" Value="Top"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Label">
        <Border>
          <ContentPresenter 
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
            RecognizesAccessKey="True"/>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground"
                    Value="{StaticResource DisabledForegroundBrush}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
           

繼續閱讀