1

我有一个带有 DockPanel 的基本 WPF 表单,有一个菜单栏、一个状态栏和一个用户控件。像这样:

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

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

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

有任何想法吗?

编辑:这是我在一般意义上要做的事情。也许有人可以提出更好的方法。

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

4

2 回答 2

0

难道你不能把它们都放在那里,但它们的可见性之一设置为折叠,然后在事件触发时,切换两者?

于 2009-02-12T04:06:58.620 回答
0

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

所以在我的窗口我有

<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();
于 2009-02-13T02:34:29.490 回答