繁体   English   中英

如果不是管理员,则隐藏TabControl中的特定TabItem

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM