我在大画布上写了一个小多边形。我想在鼠标在画布上移动时突出显示多边形。代码是这样的:
<UserControl ...>
<Canvas Name="canvas" Height="22" Width="22">
<Canvas.Resources>
<Style TargetType="Canvas">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="false">
<Setter Property="polygon.Stroke" Value="#EEEEEE"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="polygon.Stroke" Value="Aqua"/>
</Trigger>
</Style.Triggers>
</Style>
</Canvas.Resources>
<Polygon Points="11,1 16,6 16,16 11,21" Name="polygon">
<Polygon.Fill>
<SolidColorBrush Color="#EEEEEE"/>
</Polygon.Fill>
</Polygon>
</Canvas>
</UserControl>
然而,setter看不到“多边形”。
答案 0 :(得分:19)
你不能像这样使用Setters
,如果你使用这种表示法,引擎将寻找附加属性,或者如果没有为点之前的类型的属性设置Style.TargetType
。
最简单的方法是将样式应用于多边形本身,并使用绑定到DataTrigger
的{{1}},以便触发其属性。
Canvas
答案 1 :(得分:1)
尝试EventTrigger
,因为您只能在模板或样式中使用其他类型的触发器。我们已经知道Style.Trigger不允许你的场景。所以这里有适合你的例子:
<Canvas Name="canvas" Height="22" Width="22">
<Polygon Points="11,1 16,6 16,16 11,21" Name="polygon">
<Polygon.Fill>
<SolidColorBrush x:Name="brush" Color="#EEEEEE"/>
</Polygon.Fill>
<Polygon.Triggers>
<EventTrigger RoutedEvent="UIElement.MouseEnter">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="brush" Storyboard.TargetProperty="Color">
<ColorAnimation From="#EEEEEE" To="Aqua" Duration="00:00:00.01" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="UIElement.MouseLeave">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="brush" Storyboard.TargetProperty="Color">
<ColorAnimation From="Aqua" To="#EEEEEE" Duration="00:00:00.01" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Polygon.Triggers>
</Polygon>
</Canvas>
答案 2 :(得分:-1)
它正在寻找Canvas的一个名为'polygon'的属性,该属性又有一个名为'Stroke'的属性。如果希望setter定位不同的对象,则需要使用TargetName。
<Setter TargetName="polygon" Property="Stroke" Value="#EEEEEE" />