0

我正在 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();
}

我面临的错误是:

无法将类型“字符串”隐式转换为“System.Windows.Visibility”

4

2 回答 2

0

您需要绑定到 aStyle 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 上下文菜单可见性绑定

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

于 2013-06-04T01:13:23.783 回答
0

你的代码

MenuBar.Visibility="Visible";

是不正确的。

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

MenuBar.Visibility =Visibility.Visible.
于 2013-06-04T12:36:52.820 回答