繁体   English   中英

使用WPF中的菜单项显示/隐藏用户控件

[英]Show/hide user controls with menu items in WPF

我在主窗口上创建了一个堆栈面板,其中有一个包含菜单和菜单项的停靠面板。 在同一堆栈面板中,我有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。 还有另一种方法可以实现此功能吗?

简单方法:使用“崩溃”而不是“隐藏”

更好的方法:

设备视图的ViewModel必须从公共接口继承。

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

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

当用户单击RelayCommands的按钮时,应在“主”视图模型的“属性”中分配此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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM