簡體   English   中英

WPF將UserControl綁定到資源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM