Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF网格的ColorAnimation的InvalidOperationException.Background在ControlTemplate内_Wpf_Background Color_Controltemplate_Invalidoperationexception_Coloranimation - Fatal编程技术网

WPF网格的ColorAnimation的InvalidOperationException.Background在ControlTemplate内

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

我正在自定义stock WPF GroupBox控件。当鼠标指针进入控制区域时,我需要为其背景实现一个彩色动画——比如,慢慢地将背景颜色更改为预定义的颜色(让它为粉红色)。我为此创建了一个自定义控件模板,其基本部分如下所示:


然而,我不能让这个动画工作。我总是收到类型为的未处理异常:

中发生“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在某些地方并不漂亮,但我们必须处理它