2016-10-24 4 views
0

Я пытаюсь добавить триггер в шаблон управления (для кнопки), и я получаю сообщение об ошибке, в котором говорится, что цель не найдена. Вот фрагмент кодаwpf trigger setter issue

<ControlTemplate TargetType="Button"> 
<Border x:Name="t" 
     Margin="{TemplateBinding Margin}" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}"> 
     <Border.Background> 
      <LinearGradientBrush StartPoint="0,0" 
            EndPoint="0,1"> 
       <LinearGradientBrush.GradientStops> 
        <GradientStop x:Name="BackgroundGradientStop1" 
            Offset="0" 
            Color="{StaticResource BackgroundColor1}" /> 
        <GradientStop x:Name="BackgroundGradientStop2" 
            Offset="1" 
            Color="{StaticResource BackgroundColor2}" /> 
       </LinearGradientBrush.GradientStops> 
      </LinearGradientBrush> 
     </Border.Background> 

     <ContentPresenter Margin="{TemplateBinding Padding}" /> 
    </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsEnabled" 
        Value="False"> 
       <Setter TargetName="BackgroundGradientStop1" 
         Property="Color" 
         Value="White" /> 
      </Trigger> 

Название «BackgroundGradientStop1» в законодательницей триггера сообщается не найден, однако она определяется до этого в коде чуть выше. Одно и то же имя цели используется в MultiTriggers после этого, и об ошибке не сообщается.

Что не так с моим кодом? Sid

ответ

0

Я уверен (только потому, что не могу найти документацию по поддержке MSDN), потому что GradientStop не является FrameworkElement. Вы должны только иметь возможность таргетинга FrameworkElement в Setters. Решение для того, что вы пытаетесь выполнить, вероятно, для определения нескольких LinearGradientBrush в качестве ресурсов и использования триггера для установки свойства Background элемента Border в ваших триггерах ControlTemplate одному из этих ресурсов.

+0

Большое спасибо, я попробую, – Sid