2017-11-17 26 views
0

メニューとメニュー項目を保持するドッキングパネルを使用してメインウィンドウにスタックパネルを作成しました。同じスタックパネルに私は3つのユーザーコントロールを持っています。ユーザーがメニュー項目をクリックしたときに、これらの3つのユーザーコントロールのうちの1つだけを表示する必要がありますが、表示されていないときに隠れたユーザーコントロールがまだスペースを占有します。下部のメニューと私の目に見えるユーザーコントロールの間WPFのメニュー項目を含むユーザーコントロールの表示/非表示

enter image description here

、スペースをとり、他の隠されたユーザーコントロールがあります。

問題のスタックパネルは:ユーザーがメニュー項目をクリックすると

<StackPanel> 
     <DockPanel> 
      <Menu DockPanel.Dock="Top"> 
       <MenuItem Header="Equipment"> 
        <MenuItem Header="_List" Click="mnuEquipList_Click" /> 
        <MenuItem Header="_Create" Click="mnuEquipCreate_Click" /> 
        <MenuItem Header="_Update" Click="mnuEquipUpdate_Click" /> 
       </MenuItem> 
       <MenuItem Header="_Exit" Click="mnuExit_Click" /> 
      </Menu> 
     </DockPanel> 
     <equipment:EquipmentCreateView Visibility="Hidden" x:Name="equipCreateView"></equipment:EquipmentCreateView> 
     <equipment:EquipmentListView DataContext="{Binding EquipmentListViewModel}" Visibility="Hidden" x:Name="equipListView"></equipment:EquipmentListView> 
     <equipment:EquipmentUpdateView Visibility="Hidden" x:Name="equipUpdateView"></equipment:EquipmentUpdateView> 
    </StackPanel> 

、Visibilityプロパティをtrueとfalseに他の人に設定されています。この機能を実現する別の方法はありますか?

+5

使用 'Collapsed'の代わりに、' Hidden' – Shcherban

答えて

1

簡単な方法:使用して代わりに "隠された"

より良い方法を "折りたたみ":お使いの機器のビューの

のviewmodelsが共通のインターフェースからinhertanceなければなりません。

public class EquipmentCreateViewModel : IEquipment 
{ 
    //... 
} 

public class EquipmentListViewModel : IEquipment 
{ 
    //... 
} 

ユーザーがRelayCommandsでボタンをクリックしたときに、このViewModelsをMain viewmodelのプロパティに割り当てる必要があります。

public class MainViewModel 
{ 
    public IEquipment SelectedEquipment {get;set;} 
} 

メインビューでは、DataTemplateを宣言する必要があります。 MainView.xamlの

パーツ:

<UserControl.Resources> 
     <ResourceDictionary>    
      <DataTemplate DataType="{x:Type equipment:EquipmentCreateViewModel}"> 
       <equipment:EquipmentCreateView /> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type equipment:EquipmentListViewModel}"> 
       <equipment:EquipmentListView /> 
      </DataTemplate> 
      <!--And so on-->    
     </ResourceDictionary> 
    </UserControl.Resources> 

関連する問題