尝试动画时网格中的触发器导致异常? (给定对象必须是TriggerAction的实例或派生类型)

时间:2011-05-01 19:30:35

标签: wpf exception xaml triggers grid

这是一些简化的XAML。在尝试运行程序时,我得到一个例外说明:

'Add value to collection of type 'System.Windows.TriggerActionCollection' threw an exception.' Line number '106' and line position '53'. ---> System.ArgumentException: The given object must be an instance of TriggerAction or a derived type.

为什么会这样?

<Grid x:Name="LoginBoxGrid" Width="400" Height="88" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>                          

    <Grid.Triggers>
        <Trigger Property="UIElement.IsVisible" Value="True">
            <Trigger.ExitActions>
                <Storyboard >
                    <DoubleAnimation Storyboard.TargetName="UNameBoxTranslate" 
                        Storyboard.TargetProperty="X" From="0" To="-800" Duration="0:0:0.5"/>
                    <DoubleAnimation Storyboard.TargetName="UNameBoxTranslate" 
                        Storyboard.TargetProperty="Y" From="0" To="-800" Duration="0:0:0.5"/>
                </Storyboard>
            </Trigger.ExitActions>
        </Trigger>
    </Grid.Triggers>


    <TextBox >                      
        <TextBox.RenderTransform>
            <TranslateTransform x:Name="UNameBoxTranslate"/>
        </TextBox.RenderTransform>
    </TextBox>      
</Grid>

1 个答案:

答案 0 :(得分:2)

Storyboard换成BeginStoryboard,因为Storyboard不是ExitActionBeginStoryboard是。

<BeginStoryboard>
    <Storyboard>
        <!-- ... -->
    </Storyboard>
</BeginStoryboard>

修改

由于退出操作只能在样式和控件模板中使用,因此必须稍微重新组织此示例。这是一种方法:使用ContentControl作为香草模板,并填写上面的内容。不幸的是现在这些名字现在被埋没在模板扩展中,但这是一个不同的问题,因为我不确切地知道它们是如何被使用的。

<ContentControl>
    <ContentControl.Template>
        <ControlTemplate>
            <Grid x:Name="LoginBoxGrid" Width="400" Height="88" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="300"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <TextBox >
                    <TextBox.RenderTransform>
                        <TranslateTransform x:Name="UNameBoxTranslate"/>
                    </TextBox.RenderTransform>
                </TextBox>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="UIElement.IsVisible" Value="True">
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard >
                                <DoubleAnimation Storyboard.TargetName="UNameBoxTranslate" 
                                    Storyboard.TargetProperty="X" From="0" To="-800" Duration="0:0:0.5"/>
                                <DoubleAnimation Storyboard.TargetName="UNameBoxTranslate" 
                                    Storyboard.TargetProperty="Y" From="0" To="-800" Duration="0:0:0.5"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>