我有一个WPF应用程序。我有这个应用程序的不同用户,每个用户都有不同的级别。较高级别的人无法访问某些菜单项。
有没有办法在菜单项之间切换?切换单个菜单项的可见性是实现此目的的有效方法吗?还有其他办法吗?
答案 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上的属性。