我在XAML中使用TabControl,
但是我只希望某些TabItem可用,具体取决于用户。
因此, Admins = 1
应具有对TabControl的完全访问权限,
非admins = 0
因此只应提供特定标签。
如何根据用户隐藏特定标签?
感谢。
答案 0 :(得分:2)
有很多方法可以做到这一点,我想你使用哪一种方法取决于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
具有一个名为{{1}的布尔属性}
答案 1 :(得分:1)
创建一个值转换器:
[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}}">
我认为就是这样。
答案 2 :(得分:0)
您可以在应用程序加载后隐藏所有标签,然后执行以下简单操作,根据用户访问级别显示每个标签:
if (userId == 1) {
foreach (var item in tabControl.Items) {
item.Visibility = Visibility.Visible;
}
} else if (userId == 0) {
tabControl.Items[TableControlYouWantVisibile].Visibility = Visibility.Visible;
}