2016-09-19 3 views
1

У меня есть ContentPresenter, а непрозрачность содержимого должна стать 0.5, когда кнопка отключена, но Setter не может найти ее по TargetName. Есть что-то, чего я не хватает?Setter TargetName 'ContentPresenter' не распознан в Trigger

<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

О, ладно, спасибо, что Ive никогда не слышал, что это собственный именный знак, и не слышал об этом. Наверное, я смотрел/читал некоторые плохие уроки, ха-ха. Спасибо за объяснение. – Splinti

Смежные вопросы