Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中显示/隐藏带有菜单项的用户控件_C#_Wpf_Xaml_Stackpanel - Fatal编程技术网

C# 在WPF中显示/隐藏带有菜单项的用户控件

C# 在WPF中显示/隐藏带有菜单项的用户控件,c#,wpf,xaml,stackpanel,C#,Wpf,Xaml,Stackpanel,我已经在我的主窗口上创建了一个堆栈面板,其中有一个固定菜单和菜单项的停靠面板。在同一个堆栈面板中,我有3个用户控件。当用户单击菜单项时,我只需要显示这3个用户控件中的一个,但我隐藏的用户控件在未显示时仍会占用空间 在菜单和底部的“我的可见用户”控件之间,还有另一个隐藏的用户控件,它占用了空间 有问题的堆栈面板: <StackPanel> <DockPanel> <Menu DockPanel.Dock="Top">

我已经在我的主窗口上创建了一个堆栈面板,其中有一个固定菜单和菜单项的停靠面板。在同一个堆栈面板中,我有3个用户控件。当用户单击菜单项时,我只需要显示这3个用户控件中的一个,但我隐藏的用户控件在未显示时仍会占用空间

在菜单和底部的“我的可见用户”控件之间,还有另一个隐藏的用户控件,它占用了空间

有问题的堆栈面板:

<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>

当用户单击菜单项时,“可见性”属性设置为true,其他属性设置为false。是否有其他方法实现此功能?

简单方法:使用“折叠”而不是“隐藏”

更好的方法:

设备视图的视图模型必须从公共界面插入

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

public class EquipmentListViewModel : IEquipment
{
     //...
}
当用户按RelayCommand单击按钮时,应在主viewmodel的属性中指定此ViewModels

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>


使用
折叠
而不是
隐藏