WPF:如何从一个停靠的UserControl转换到另一个?

时间:2009-02-12 03:50:15

标签: .net wpf layout animation

我有一个带有DockPanel的基本WPF表单,有一个菜单栏,一个状态栏和一个UserControl。像这样:

<DockPanel>
  <Menu DockPanel.Dock="Top">
    ...
  </Menu>
  <StatusBar DockPanel.Dock="Bottom">
    ...
  </StatusBar>
  <UserControls:MyUserControl />
<DockPanel>

我的问题是:根据事件,我想将UserControl转换为第二个用户控件。

在XAML中定义它们都没有问题(因为我知道其他控件将是什么),但我无法计算出我需要的容器类型,这将允许我使用动画(理想情况下,一个消失在左边,另一个从右边消失)。 UserControls应自动增长以消耗所有可用空间。

有什么想法吗?

编辑:以下是我一般意义上的尝试。也许有人可以提出更好的方法。

我有一个ListView / GridView,它有一个客户端列表。当用户双击客户端时,我想用UserControl替换客户端列表,UserControl显示该客户端的详细信息(并进一步允许它们进行交互)。

2 个答案:

答案 0 :(得分:0)

难道你不能把它们都放在那里但是其中一个可见性设置为折叠,然后在事件发生时,只需切换两个?

答案 1 :(得分:0)

找到了一种方法。我在之前放置了UserControl所在的网格,然后将两个UserControl放在其中。将一个设置为可见,将一个设置为折叠。然后在事件发生时,我可以播放我的动画(其中包括)交换可见性。

所以在我的窗口中我有

<Grid>
    <UserControls:Control1 x:Name="Control1" />
    <UserControls:Control2 x:Name="Control2" />
</Grid>

然后在窗口资源中

<Storyboard x:Key="ShowControl2">
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control1" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00.2000000" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control2" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

然后在代码中,当我想隐藏控件1并显示控件2时,我有这个:

Storyboard showControl2Animation = (Storyboard)FindResource("ShowControl2");
showControl2Animation .Begin();
control2.Focus();