Исключение вызвано триггером в сетке при попытке анимации?(Данный объект должен быть экземпляром TriggerAction или производным типом) - PullRequest
0 голосов
/ 01 мая 2011

Вот несколько упрощенных 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 Ответ

2 голосов
/ 02 мая 2011

Оберните Storyboard в BeginStoryboard, поскольку Storyboard - это не ExitAction, а BeginStoryboard.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...