WPF网格的ColorAnimation的InvalidOperationException.Background在ControlTemplate内
我正在自定义stock WPF GroupBox控件。当鼠标指针进入控制区域时,我需要为其背景实现一个彩色动画——比如,慢慢地将背景颜色更改为预定义的颜色(让它为粉红色)。我为此创建了一个自定义控件模板,其基本部分如下所示:WPF网格的ColorAnimation的InvalidOperationException.Background在ControlTemplate内,wpf,background-color,controltemplate,invalidoperationexception,coloranimation,Wpf,Background Color,Controltemplate,Invalidoperationexception,Coloranimation,我正在自定义stock WPF GroupBox控件。当鼠标指针进入控制区域时,我需要为其背景实现一个彩色动画——比如,慢慢地将背景颜色更改为预定义的颜色(让它为粉红色)。我为此创建了一个自定义控件模板,其基本部分如下所示: 然而,我不能让这个动画工作。我总是收到类型为的未处理异常: 中发生“System.InvalidOperationException” PresentationFramework.dll,其中包含以下附加信息: “Background”属性未指向路径中的Dependen
然而,我不能让这个动画工作。我总是收到类型为的未处理异常:
中发生“System.InvalidOperationException”
PresentationFramework.dll,其中包含以下附加信息:
“Background”属性未指向路径中的DependencyObject
'背景。(0)'
我用谷歌搜索了这个问题。似乎,我需要为TargetProperty使用正确的语法来设置动画。但是,我尝试了许多变体,如以下变体,但它们在我的情况下都不起作用:
Background.Color
(面板背景)。颜色
(面板背景)。(SolidColorBrush.Color)
(网格背景)。(solidcolorbush.Color)
我的搜索方向不对吗?您的
TargetElement
需要一个初始设置器,以使动画正常工作
示例
<GroupBox>
<GroupBox.Style>
<Style TargetType="GroupBox">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid Name="MainGrid" SnapsToDevicePixels="true">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Background" Value="Blue"></Setter>
</Style>
</Grid.Style>
<ContentPresenter/>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="MainGrid" Storyboard.TargetProperty="Background.Color" To="Pink" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</GroupBox.Style>
<Button Content="test" Width="200" Height="50"></Button>
</GroupBox>
完成此操作后,您可以轻松地使用故事板。TargetProperty=“Background.Color”只要使用
TargetProperty=Background
就可以了。如果它不能识别粉红色
作为画笔,您可能需要使用静态资源
,但如果它是预定义的颜色名称,那么它应该单独使用名称。@Adwaenyth,确定它不起作用。其他信息:“System.Windows.Media.Animation.ColorAnimation”动画对象不能用于设置属性“Background”的动画,因为它属于不兼容的类型“System.Windows.Media.Brush”。Mh。。。尝试使用Storyboard.TargetProperty=(GroupBox.Background)。(SolidColorBrush.Color)
,是否如前所述有效?@Adwaenyth,PresentationFramework.dll中仍然发生了类型为“System.InvalidOperationException”的未处理异常。附加信息:“Background”属性不指向路径“(0)。(1)”中的DependencyObject。是的,真的,我甚至想过:ColorAnimation如何知道如何将未设置的颜色设置为粉色?但是,我需要以通用的方式执行此操作,即不为主布局网格设置预定义的颜色。有没有办法实现这一点?顺便说一句,即使是网格节点中的简单属性设置也有帮助:
。您可以为网格定义默认背景。内置默认值应为透明或白色。只要再设置一次,你就会有一个更通用的方法。将背景设置为透明不会改变控件中的鼠标行为吗?另见此。有没有办法将背景从空值设置为指定的颜色?没有。你最初设置什么背景并不重要,只要你设置了一个背景。Wpf在某些地方并不漂亮,但我们必须处理它