这是一些简化的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>
答案 0 :(得分:2)
将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>