【问题标题】:Hiding and Showing menu (tool) bar based on user access level根据用户访问级别隐藏和显示菜单(工具)栏
【发布时间】:2013-05-30 06:46:16
【问题描述】:

我正在 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”

【问题讨论】:

  • 您是否在应用程序中使用了 MVVM 设计模式?
  • 嗨科林,不,我不是,事实上没有听说过。这是我应该调查的吗?有没有什么好地方可以让我找到更多关于这方面的信息,或者我应该谷歌吗?
  • 是WPF中广泛使用的一种设计模式。这是一个Link 介绍它。如果您使用它,您的问题将很简单。希望对您有所帮助。

标签: c# wpf controls


【解决方案1】:

您需要绑定到 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

【讨论】:

  • 感谢戴夫。我会在你的建议中告诉你。谢谢
【解决方案2】:

你的代码

MenuBar.Visibility="Visible";

不正确。

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

MenuBar.Visibility =Visibility.Visible.

【讨论】:

  • 这行不通 - 我试了一下只是为了确认我昨晚看这个的时候。
  • 你是对的,它解决了他确切陈述的问题,但它不会解决他的实际问题。如果他从枚举中正确分配了值,那么他会马上问“我如何让它工作,因为分配枚举不会改变可见性?”。在大多数情况下,我倾向于同意对问题的最低回答,但在这种情况下,似乎应该采取下一步的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2017-12-01
  • 2023-03-26
相关资源
最近更新 更多