[英]Hide specific TabItem in TabControl if not an admin
我在XAML中使用TabControl,
但是我只希望某些TabItem可用,具体取决于用户。
Admins = 1
因此应该具有对TabControl的完全访问权限,
非admins = 0
因此应该只有特定的选项卡可用。
如何根据用户隐藏特定选项卡?
谢谢。
有很多方法可以做到这一点,我想你使用哪种方法取决于存储IsAdmin
标志的位置
我个人的偏好是DataTrigger
,它基于用户首次登录时设置的静态User
对象
<Style TargetType="{x:Type TabItem}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Value="True" Binding="{Binding IsAdmin, Source={x:Static local:Settings.CurrentUser}}">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
Settings
将是一个静态类,其中包含在应用程序启动和用户登录时设置的CurrentUser
属性CurrentUser
有一个名为IsAdmin
的布尔属性
创建一个值转换器:
[ValueConversion(typeof(bool), typeof(Visibility))]
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool myValue = (bool)value;
if (myValue)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
将此作为资源添加到您的XAML:
<local:BooleanToVisibilityConverter x:Key="visibilityConverter"></local:VisibilityConverter>
假设您的属性显示用户是否是名为IsAdmin的管理员
<TabItem Visibility={Binding Path=IsAdmin, Converter={StaticResource visibilityConverter}}">
我想这就是全部。
您可以在应用程序加载后隐藏所有选项卡,然后执行以下简单操作,根据用户访问级别显示每个选项卡:
if (userId == 1) {
foreach (var item in tabControl.Items) {
item.Visibility = Visibility.Visible;
}
} else if (userId == 0) {
tabControl.Items[TableControlYouWantVisibile].Visibility = Visibility.Visible;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.