2016-09-19 37 views
1

我有一個ContentPresenter,當禁用Button時,內容的不透明度應該變爲0.5,但Setter無法通過TargetName找到它。有什麼我失蹤?Setter TargetName'ContentPresenter'在觸發器中無法識別

<Style TargetType="Button"> 
    <Style.Triggers> 
     <Trigger Property="Tag" Value="MenuButton"> 
      <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/> 
      <Setter TargetName="ContentPresenter" Property="Opacity" Value="1.0"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Border BorderThickness="1,0,0,1" Background="{TemplateBinding Background}"> 
          <ContentPresenter 
           x:Name="ContentPresenter" 
           Margin="1" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           Opacity="1.0"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/> 
      <Setter TargetName="ContentPresenter" Property="Opacity" Value="0.5"/> 

     </Trigger> 
    </Style.Triggers> 
</Style> 

回答

1

可以使用ControlTemplate.Triggers改變通過二傳手ContentPresenter性能。 「ContentPresenter」名稱僅在模板中是已知的。

<Style TargetType="Button"> 
    <Style.Triggers> 
     <Trigger Property="Tag" Value="MenuButton"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Border BorderThickness="1,0,0,1" Background="{TemplateBinding Background}"> 
          <ContentPresenter 
           x:Name="ContentPresenter" 
           Margin="1" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           Opacity="1.0"/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsEnabled" Value="False"> 
           <Setter Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/> 
           <Setter TargetName="ContentPresenter" Property="Opacity" Value="0.5"/> 
          </Trigger> 

          <Trigger Property="IsEnabled" Value="True"> 
           <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/> 
           <Setter TargetName="ContentPresenter" Property="Opacity" Value="1"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 

    </Style.Triggers> 
</Style> 
2

對於這樣的問題,您需要了解NameScope的概念。 Template定義了它自己的NameScope。因此,您的TargetName將無法​​從模板外部工作。

因此,請嘗試從ControlTemplate內部訪問它。

+0

哦好吧,謝謝我從來沒有聽說過這是它自己的名望範圍,也沒有聽說過它。我猜我看過/看過一些不好的教程,哈哈。感謝您的解釋。 – Splinti