我有一个带有DockPanel的基本WPF表单,有一个菜单栏,一个状态栏和一个UserControl。像这样:
<DockPanel>
<Menu DockPanel.Dock="Top">
...
</Menu>
<StatusBar DockPanel.Dock="Bottom">
...
</StatusBar>
<UserControls:MyUserControl />
<DockPanel>
我的问题是:根据事件,我想将UserControl转换为第二个用户控件。
在XAML中定义它们都没有问题(因为我知道其他控件将是什么),但我无法计算出我需要的容器类型,这将允许我使用动画(理想情况下,一个消失在左边,另一个从右边消失)。 UserControls应自动增长以消耗所有可用空间。
有什么想法吗?
编辑:以下是我一般意义上的尝试。也许有人可以提出更好的方法。
我有一个ListView / GridView,它有一个客户端列表。当用户双击客户端时,我想用UserControl替换客户端列表,UserControl显示该客户端的详细信息(并进一步允许它们进行交互)。
答案 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();