私は Windows Phone 8 アプリに取り組んでおり、選択時に独自のサイズを変更する UserControls を作成しようとしています。Selected/NotSelected 間の変更は、VisualStateManager を使用して行われます。次の例を単純にするために、これをスキップして、UserControl を直接タップするように反応します。
問題は、Storyboard.TargetName プロパティで UserControl 自体を参照する方法がわからないため、Storyboard を使用して 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」を使用しても機能せず、「TargetName this を解決できません」という InvalidOperationException がスローされます。「 Namespace.MyUserControl 」を使用する場合も同じことが起こります。
「LayoutRoot」を TargetName として使用しても例外はスローされませんが、どちらも機能しません。何も起こりません。
UserControl 内のサブコントロールのアニメーション化 (例: Storyboard.TargetName=TestRect" を使用した TestRect) は問題なく動作します。 また、ストーリーボードなしで幅と高さを直接設定しても問題ありません。
これを解決する方法はありますか?