【发布时间】:2017-01-19 14:41:57
【问题描述】:
我正在自定义常用的 WPF GroupBox 控件。当鼠标指针进入控制区域时,我需要为其背景实现彩色动画 - 比如说,慢慢地将背景颜色更改为预定义的颜色(让它变成粉红色)。我为此创建了一个自定义控件模板,其基本部分如下所示:
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid Name="MainGrid" SnapsToDevicePixels="true">
<!-- Control layout stuff with ContentPresenter -->
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="MainGrid"
Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
To="Pink" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
但是,我无法制作此动画。我总是得到一个未处理的异常类型:
'System.InvalidOperationException' 发生在 PresentationFramework.dll 附加信息如下: “背景”属性未指向路径中的 DependencyObject '背景。(0)'
我用谷歌搜索了这个问题。看来,我需要为 TargetProperty 使用正确的语法来制作动画。但是,我尝试了很多变体,例如以下变体,但它们都不适用于我的情况:
Background.Color(Panel.Background).Color(Panel.Background).(SolidColorBrush.Color)(Grid.Background).(SolidColorBrush.Color)
我的搜索方向不对吗?
【问题讨论】:
-
只要使用
TargetProperty=Background就可以了。如果它无法将Pink识别为画笔,您可能需要为此使用StaticResource,但只要它是预定义的颜色名称,它就应该单独使用名称。 -
@Adwaenyth,确定它不起作用。附加信息:“System.Windows.Media.Animation.ColorAnimation”动画对象不能用于动画属性“背景”,因为它的类型不兼容“System.Windows.Media.Brush”。
-
Mh... 试试
Storyboard.TargetProperty=(GroupBox.Background).(SolidColorBrush.Color),然后如here 所述那样有效吗? -
@Adwaenyth,在 PresentationFramework.dll 中仍然发生了相同的“System.InvalidOperationException”类型的未处理异常。附加信息:“Background”属性不指向路径“(0).(1)”中的 DependencyObject。
标签: wpf background-color controltemplate invalidoperationexception coloranimation