2009-02-12 63 views
1

我有一个基本的WPF窗体与DockPanel,有一个菜单栏,一个状态栏和一个用户控件。像这样:WPF:我如何从一个停靠的UserControl转换到另一个?

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

我的问题是:基于事件,我想在用户控件转换到第二用户控制。

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

任何想法?

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

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

回答

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(); 
0

难道你不能只让他们在那里,但他们的可见性的一个设置为折叠,然后在事件引发,只是切换两个?

+0

但如果我这样做,那么这不是在XAML持续控制不使用所有可用空间。 – Ray 2009-02-12 21:00:14

相关问题