проблема с настройщиком триггера wpf

#wpf #xaml #triggers

#wpf #xaml #триггеры

Вопрос:

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

     <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» в установщике триггера не найдено, однако оно определено до этого в коде чуть выше. После этого в мультитриггерах используется то же целевое имя, и об ошибке не сообщается.

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

Ответ №1:

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