【问题标题】:Show/hide user controls with menu items in WPF在 WPF 中显示/隐藏带有菜单项的用户控件
【发布时间】:2018-05-01 09:35:24
【问题描述】:

我在主窗口上创建了一个堆栈面板,其中一个停靠面板用于保存菜单和菜单项。在同一个堆栈面板中,我有 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>

当用户单击菜单项时,Visibility 属性设置为 true,其他属性设置为 false。还有其他方法可以实现此功能吗?

【问题讨论】:

  • 使用Collapsed 而不是Hidden

标签: c# wpf xaml stackpanel


【解决方案1】:

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

更好的方法:

您的设备视图的视图模型必须继承自通用接口。

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>

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多