2009-02-12 49 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

相關問題