在菜单项WPF之间切换?

时间:2012-01-13 15:06:34

标签: wpf

我有一个WPF应用程序。我有这个应用程序的不同用户,每个用户都有不同的级别。较高级别的人无法访问某些菜单项。

有没有办法在菜单项之间切换?切换单个菜单项的可见性是实现此目的的有效方法吗?还有其他办法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用绑定和转换器实现此目的。基本上,如果菜单的DataContext上有一个属性(将由菜单项继承),则指定权限级别;然后你可以将它绑定到菜单项的可见性。

显然,由于权限不能隐式转换为Visibility枚举,因此您必须创建IValueConverter接口的实现,该接口将特定于将权限转换为可见性,而反之亦然,基于当前的权限级别。这也需要转换器具有当前权限级别的一些概念,因此您要么允许它访问某些静态属性(我不建议),或者您需要获取转换器实例(确保您只使用一个实例)并将当前权限级别传递给它。

答案 1 :(得分:3)

有几种不同的方法可以做到这一点。切换可见性是一种方式,但如果您希望代码对其他人可读,我建议实现某种设计模式。

我建议遵循MVVM或MVC模式。这意味着您需要为不同的用户创建不同的视图。

对于像菜单项这样简单的东西,您可以将UI的这一部分分离到用户控件中,并且在该用户控件中,为不同的用户提供不同的XAML。然后在代码中,根据登录的用户显示正确的XAML(视图)。

答案 2 :(得分:1)

是的,Visibility属性适用于MenuItem。如果您将以下代码粘贴到Kaxaml,您会看到隐藏编辑菜单,工具>也是如此。第2项。

<Menu>
  <MenuItem Header="_File"/>
  <MenuItem Header="_Edit" Visibility="Collapsed"/>
  <MenuItem Header="_Tools">
    <MenuItem Header="Item 1"/>
    <MenuItem Header="Item 2" Visibility="Collapsed"/>
    <MenuItem Header="Item 3"/>
  </MenuItem>
</Menu>

您也可以通过编程方式更改Visibility,或将其数据绑定到viewmodel上的属性。