wpf触发器设置器问题

时间:2016-10-24 22:15:59

标签: wpf xaml triggers

我正在尝试将触发器添加到控件模板(对于按钮),并且我收到一条错误消息,指出无法找到目标。这是一段代码片段

    <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>

触发器的Setter中的名称“BackgroundGradientStop1”被报告为未找到,但是在上面的代码中之前已经定义了它。在此之后,MultiTriggers中使用相同的目标名称,并且不会报告任何错误。

我的代码出了什么问题? SID

1 个答案:

答案 0 :(得分:0)

我非常肯定(仅因为我找不到MSDN支持文档)这是因为GradientStop不是FrameworkElement。你应该只能在Setters中定位FrameworkElement。您要完成的解决方案可能是将多个LinearGradientBrush定义为资源,并使用触发器将ControlTemplate触发器中Border元素的Background属性设置为其中一个资源。