基于控件模板的控件属性的故事板动画

时间:2009-11-25 16:03:07

标签: c# wpf animation storyboard

这就是我所拥有的

  1. 我的window.resource中一个按钮的ControlTemplate,有一个带有外部渐变的椭圆(名为 - TasksToggleButtonOuterGlowBitmapEffect )和一个文本
  2. 使用此模板的按钮
  3. 这就是我需要的

    1。在上述椭圆的外部光线上操作的故事板 2.我随时会从我的代码隐藏文件中触发这个故事板

    当我使用以下代码段尝试此操作时,框架为我提供了一个运行时异常,指出它无法找到控件, TasksToggleButtonOuterGlowBitmapEffect

    <Window.Resource>
        <ControlTemplate x:Key="DefaultTasksToggleButtonTemplate" TargetType="ToggleButton">
            <Grid Margin="2">
                <Border BorderBrush="White" BorderThickness="2" CornerRadius="20">
                    <Border.BitmapEffect>
                        <OuterGlowBitmapEffect x:Name="TasksToggleButtonOuterGlowBitmapEffect" GlowColor="LightGray" />
                    </Border.BitmapEffect>
                </Border>
                <Ellipse Fill="Red" Width="20" Height="20" Margin="2" />
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
            </Grid>
        </ControlTemplate>
    
    
        <Storyboard x:Key="GlowStoryboard">
            <DoubleAnimation Storyboard.TargetName="TasksToggleButtonOuterGlowBitmapEffect" Storyboard.TargetProperty="GlowSize" From="5" To="10" />
        </Storyboard>
    
    </Window.Resources>
    

    更新 - 我希望它在资源中,以便任何按钮都可以使用它

1 个答案:

答案 0 :(得分:0)

从表面上看,这对我来说是一个使用Visual State Manager的好选择。如果触发器会像MouseOver,Pressed等那样,动画对于这种效果有点沉重。如果你打算对Button State做出反应,那么一定要看看VSM。

您遇到的问题是您尝试访问的目标是模板的一部分,因此不是真正的元素。你不能这样做是有道理的:想象你有50个按钮都使用相同的模板:动画如何知道你真正意味着哪些TasksToggleButtonOuterGlowBitmapEffect?

您可以在触发器中处理此问题(如果这是WPF),但我认为这样做动画也需要在模板中定义,我不知道您是否可以这样做

您也可以在运行时在代码后面导航模板树并在那里设置动画。