使用触发器设置BorderBrush的颜色

时间:2014-02-21 15:35:47

标签: c# .net wpf xaml triggers

我在ControlTemplate中正确处理语法时遇到了一些困难。以下是它的基础知识:

<ControlTemplate TargetType="{x:Type foo:bar">
    <Border Name="Bd">  
        <Border.BorderBrush>
            <SolidColorBrush Color="{DynamicResource DefaultBorderBrushLightBrush}" />
        </Border.BorderBrush>
    </Border>

    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="true">
            <Setter Property="(Border.BorderBrush).(SolidColorBrush.Color)"
                    TargetName="Bd"
                    Value="{DynamicResource PressedBorderDarkColor}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate

这会产生错误消息msg

  

无法解析模板属性'颜色''。验证拥有类型是Style的TargetType,或使用Class.Property语法指定属性。

这看起来很清楚 - 我没有正确指定目标属性。我尝试了几种不同的方式。具体来说,我试过了

<Setter Property="BorderBrush" TargetName="Bd">
    <Setter.Value>
        <SolidColorBrush Color="{DynamicResource PressedBorderDarkColor}" />
    </Setter.Value>
</Setter>

......这确实构建了,我想,它给了我正在寻找的东西。

仍然,为什么我不能设置画笔颜色?我该如何指定它?

更广泛地说,我在哪里可以了解有关此“Class.Property语法”的更多信息?我通过MSDN的XAML Syntax In Detail阅读,但如果它被覆盖在那里,我担心我会忽略它。

2 个答案:

答案 0 :(得分:1)

您不能简单地设置画笔颜色,因为它不是目标Border对象Bd的属性,而是目标对象具有属性BorderBrush,但颜色是对象的属性受BorderBrush属性影响的SolidColorBrush。例如,当您必须在动画中指定StoryBoard的附加属性TargetProperty时,使用语法(Border.BorderBrush)。(SolidColorBrush.Color):

<VisualState x:Name="MouseOver">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlMouseOverColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>

答案 1 :(得分:0)

这意味着当Style / ControlTemplate设置TargetType时,例如 - Border,是一个在以下位置指示的属性:

<Style x:Key="TestStyle" TargetType="{x:Type Border}>
    <Setter Property="BorderBrush" Value="Green" />

自动转换为:

<Setter Property="Border.BorderBrush" Value="Green" />
未明确指定样式时使用的

Class.Property 语法TargetType

<Style x:Key="TestStyle">
    <Setter Property="Border.BorderBrush" Value="Red" />

在样式中可以遵循两种方式,设计类型如:

(Border.BorderBrush).(SolidColorBrush.Color)

常用于Storyboard's