根据用户访问级别隐藏和显示菜单(工具)栏

时间:2013-06-04 01:02:22

标签: c# wpf controls

我正在使用Visual Studio 2010 express中的WPF c#创建桌面应用程序。我创建了一个菜单栏,我想根据用户访问级别显示某些元素。我可以将菜单可见性设置为Hidden作为默认设置,但是一旦成功登录,就很难将访问率设置为Visible。下面是'xaml'代码和c#代码的示例。

'XAML代码'

<Menu Name="MenuBar" VerticalAlignment="Top" Width="Auto" Margin="0,0,0,389">
    <MenuItem Header="_Maintenance" Margin="2,0,0,2" Width="Auto"
              Visibility="hidden" Click="MenuItem_Click">
        <MenuItem Header="Customer Maintenance"/>
        <MenuItem Header="Staff Maintenance"/>
        <MenuItem Header="User Maintenance"/>
        <MenuItem Header="Item Maintenance"/>
        <MenuItem Header="Standing Maintenance"/>
    </MenuItem>
</Menu>

我尝试'C#代码'

public MainWindow()
{
    InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    MenuBar.Visibility="Visible";

    //Load and display sign in screen
    App1 app = new App1();
    app.LoadSignIn();
}

我面临的错误是:

  

无法将类型'string'隐式转换为'System.Windows.Visibility'

2 个答案:

答案 0 :(得分:0)

您希望绑定到Style Trigger以获取此行为,如下所示(摘自下面的其中一个链接,修改为与您提供的xaml相匹配):

<Window.Resources>
  <Style x:Key="VisibleWhenUserAllowedAccess" TargetType="MenuItem">
      <Style.Triggers>
          <DataTrigger Binding="{Binding IsUserAllowedAccess}" Value="False">
              <Setter Property="Visibility" Value="Hidden"/>
          </DataTrigger>
    </Style.Triggers>
  </Style>

<Menu Name="MenuBar" VerticalAlignment="Top" Width="Auto" Margin="0,0,0,389">
    <MenuItem Header="_Maintenance" Margin="2,0,0,2" Width="Auto"
          Click="MenuItem_Click" 
          Style="{StaticResource VisibleWhenFileIsOpen}">
        <MenuItem Header="Customer Maintenance"/>
        <MenuItem Header="Staff Maintenance"/>
        <MenuItem Header="User Maintenance"/>
        <MenuItem Header="Item Maintenance"/>
        <MenuItem Header="Standing Maintenance"/>
    </MenuItem>
</Menu>

更多关于在这两个链接中更改WPF中菜单可见性的阅读:

WPF UserControl Context Menu Visibility Binding

http://www.codeproject.com/Articles/37848/WPF-Data-Bound-Menus

答案 1 :(得分:0)

您的代码

MenuBar.Visibility="Visible";

不正确。

可见性是枚举类型而不是字符串。您可以这样设置:

MenuBar.Visibility =Visibility.Visible.