我在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阅读,但如果它被覆盖在那里,我担心我会忽略它。
答案 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
。