我正在开发一个 Windows Phone 8 应用程序,并且我正在尝试创建一个用户控件,该控件在被选中时会改变其自身的大小。Selected/NotSelected 之间的更改是使用 VisualStateManager 完成的。为了保持下面的例子简单,我跳过这个并直接点击 UserControl。
问题是,我找不到任何方法来使用 Storyboard 更改 UserControl 的大小,因为我不知道如何在 Storyboard.TargetName 属性中引用 UserControl 本身:
<UserControl
x:Class="Namespace.MyUserControl"
...
Tap="UserControl_Tap">
<UserControl.Resources>
<Storyboard x:Key="Expand">
<DoubleAnimation To="400" Storyboard.TargetName="????" Storyboard.TargetProperty="Width">
<DoubleAnimation.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
<Storyboard x:Key="Collaps">
...
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Rectangle x:Name="TestRect" Fill="Red" Width="10" Height="10"/>
</Grid>
</UserControl>
private void UserControl_Tap(object sender, System.Windows.Input.GestureEventArgs e) {
if (Width < 400) {
Storyboard storyBoard = (Storyboard)this.Resources["Expand"];
storyBoard.Begin();
Width = 400;
Height = 400;
} else {
Storyboard storyBoard = (Storyboard)this.Resources["Collaps"];
storyBoard.Begin();
Width = 200;
Height = 200;
}
}
故事板需要指定Storyboard.TargetName。应该用什么代替???引用 UserControl 本身?使用“ this ”不起作用并引发 InvalidOperationException“无法解析 TargetName this”。使用“ Namespace.MyUserControl ”时也会发生同样的情况。
使用“ LayoutRoot ”作为 TargetName 不会引发任何异常,但它也不起作用:没有任何反应。
对 UserControl 中的任何子控件进行动画处理(例如,使用 Storyboard.TargetName=TestRect" 的 TestRect )都可以正常工作。也可以直接设置 Width 和 Height 而无需任何 storyboard 工作没有任何问题。
知道如何解决这个问题吗?