[英]WPF Bind UserControl to resource
目前,我正在做一些實驗。 我當前的場景:我有一個StoryBoard可以在2個UserControl之間進行轉換(例如,它縮小了當前的UserControl,然后增長了另一個)。
我想要做的是將2個UserControls定義為XAML的一部分,使用“Current”和“Next”鍵。 Current應綁定到當前查看的UserControl。 Next應該在轉換之前綁定,因此StoryBoard知道要轉換到哪個元素。 這就是我被困的地方:完全使用XAML,怎么會這樣呢?
我有一個簡單的StoryBoard,它是ItemsControl的Resource,還有兩個UserControl項:
<ItemsControl.Resources>
<Storyboard x:Key="TransitionStoryboard">
<!-- Shrink this one. -->
<DoubleAnimation Storyboard.Target="{Binding Current}" Storyboard.TargetProperty="Width" To="0" Duration="0:0:1"/>
<!--Grow the next.-->
<DoubleAnimation Storyboard.Target="{Binding Next}" Storyboard.TargetProperty="Width" To="100" BeginTime="0:0:1" Duration="0:0:1"/>
</Storyboard>
<UserControl x:Key="Current"/>
<UserControl x:Key="Next" Width="0"/>
</ItemsControl.Resources>
所以,當我定義一個屬於ItemsControl的新UserControl時(如下所示):
<my:Control1 x:Name="ControlOne"/>
如何將“當前”UserControl設置為ControlOne? 然后,當我想要轉換時,如何將其設置為“下一步”? 如何在觸發后更改這些?
謝謝
這是一團糟。 您似乎完全誤解了靜態資源的使用方式。
要實現您要做的事情,您應該首先決定觸發動畫的內容。 理想情況下,它應該是控件上的一些DependencyProperty
,或視圖模型上的屬性(實現INotifyPropertyChanged
)。 例如,您可以聲明IsSelected
屬性。 然后你應該創建一個樣式,當選擇控件時觸發“增長”動畫,並在控件失去選擇時觸發“縮小”動畫。 例如:
<Style TargetType="Control" x:Key="FancyStyle">
<Style.Triggers>
<DataTrigger Binding={Binding IsSelected} Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource YourGrowAnim}"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource YourShrinkAnim}"/>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
然后,您應該將該樣式分配給每個控件,您希望以這種方式設置動畫並在IsSelected屬性之間設置過渡。 您也可以使用EventTrigger
並將動畫綁定到事件(例如,當控件獲得/失去焦點時,您可以觸發這些動畫)。
你也應該修復你的“成長”動畫,它很可能無法工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.