C# 使用触发器设置边框笔刷的颜色
我在C# 使用触发器设置边框笔刷的颜色,c#,.net,wpf,xaml,triggers,C#,.net,Wpf,Xaml,Triggers,我在ControlTemplate中正确计算语法时遇到了一些困难。以下是它的基本原理: <ControlTemplate TargetType="{x:Type foo:bar"> <Border Name="Bd"> <Border.BorderBrush> <SolidColorBrush Color="{DynamicResource DefaultBorderBrushLightBrush}"
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
这意味着,当样式/控制模板集TargetType
(例如-Border
)是在中指示的属性时:
<Style x:Key="TestStyle" TargetType="{x:Type Border}>
<Setter Property="BorderBrush" Value="Green" />
在样式中,可以采用两种方式,设计类型如下:
(Border.BorderBrush).(SolidColorBrush.Color)
通常用于故事板的
不能设置画笔颜色,因为它不是目标边界对象的属性Bd,目标对象具有属性BorderBrush,而颜色是对象SolidColorBrush的属性,受BorderBrush属性影响。语法(Border.BorderBrush)。(SolidColorBrush.Color)用于指定故事板的附加属性TargetProperty
,例如在动画中:
<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>
目标对象不是foo:bar;目标对象是名为“Bd”的对象,其类型为Border
。当然它也没有Color
属性,但是如果你看的话,你会看到borders的颜色是左右设置的(虽然是动画,而不是触发器)。@mcwyrm:我理解,正如你所说的颜色不是对象边框的属性,如果颜色像你最近说的那样被使用,这只是因为它是与它们相关的对象的属性,例如GradientStop
,我将更新我的答案。我相信在这种情况下,背景中有一个转换器,可以将字符串转换为画笔。因为我引用的资源是一种颜色,而不是画笔或字符串,所以这种语法对我不起作用。所以Class.Property语法是否仅在情节提要中有效?为什么它在这里不起作用?@mcwyrm:Class.Property
在任何地方都有效,无论是在样式中还是在情节提要中。故事板的TargetProperty
属性支持复杂语法((Border.BorderBrush)。(SolidColorBrush.Color)
),使您能够以其他属性的属性为目标。有关以属性为目标的不同方法的详细说明,请参见。
<Style x:Key="TestStyle">
<Setter Property="Border.BorderBrush" Value="Red" />
(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>