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

时间:2012-03-30 10:21:56

标签: c# wpf xaml admin tabcontrol

我在XAML中使用TabControl,

但是我只希望某些TabItem可用,具体取决于用户。

因此,

Admins = 1应具有对TabControl的完全访问权限,

admins = 0因此只应提供特定标签。

如何根据用户隐藏特定标签?

感谢。

3 个答案:

答案 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;
}