#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
триггерах на один из этих ресурсов.