我有一个用户控件,它由一个包含椭圆和视图框的画布组成。椭圆是背景,视图框在运行时用从另一个程序集加载的图形填充。我在为我的控件创建“热”行为时遇到问题,因此当鼠标悬停在椭圆上时椭圆会改变颜色。
如果我在椭圆上放置一个触发器,那么颜色会改变,但是当鼠标移到视图框中的图形上时它会变回来,因为视图框不是椭圆的子对象。
根据我的阅读,应该可以从父元素的触发器中设置子元素的属性。但是,我无法让它工作。我的代码如下所示:
<Viewbox Margin="5" >
<Viewbox.Resources>
<SolidColorBrush x:Key="HotColor" Color="Blue"/>
<SolidColorBrush x:Key="ColdColor" Color="Red"/>
<Style TargetType="Canvas" x:Key="BackgroundStyle">
<Setter Property="Ellipse.Fill" Value="{StaticResource ColdColor}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Ellipse.Fill" Value="{StaticResource HotColor}"/>
</Trigger>
</Style.Triggers>
</Style>
</Viewbox.Resources>
<Canvas Width="44.000" Height="44.000" Style="{StaticResource BackgroundStyle}">
<Ellipse Width="44" Height="44"/>
<Viewbox Name="ButtonGraphics"/>
</Canvas>
</Viewbox>
结果是我的椭圆上根本没有颜色。有趣的是,如果我尝试设置 Ellipse.Opacity,它会起作用,但会影响椭圆和图形!所以看起来它被应用于画布,而不是椭圆?