我正在使用Windows Phone 8應用程序,我正在嘗試創建一個UserControl,它在選擇時更改其自己的大小。 Selected/NotSelected之間的變化是使用VisualStateManager完成的。爲了保持下面的例子簡單,我忽略它並直接點擊UserControl。UserControl如何使用Storyboard更改其自己的大小?
的問題是,我無法找到任何方式改變用故事板的用戶控件的大小,因爲我不知道如何引用用戶控件本身在Storyboard.TargetName屬性:
<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本身?使用「此」不起作用,並引發InvalidOperationException「無法解析TargetName this」。使用「Namespace.MyUserControl」時會發生同樣的情況。
使用「LayoutRoot」作爲TargetName不會引發任何異常,但它不起作用:沒有任何反應。
動畫用戶控件內的任何分控制(例如使用TestRect = Storyboard.TargetName TestRect「)工作而沒有任何問題。另外設定的寬度和高度的情況下直接任何情節串連圖板工作沒有任何問題。
任何想法如何解決這個?
爲什麼不在你的目標頁面中創建故事板,這種方式用戶控件是由它的屬性定義的 –
UserControl應該用在許多不同的頁面上,並且行爲應該總是相同的。一次(UserControl內部)實現一次行爲,而不是在使用UserControl的每一頁上執行此操作都不會更好嗎? –