Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于用户访问级别隐藏和显示菜单(工具栏)_C#_Wpf_Controls - Fatal编程技术网

C# 基于用户访问级别隐藏和显示菜单(工具栏)

C# 基于用户访问级别隐藏和显示菜单(工具栏),c#,wpf,controls,C#,Wpf,Controls,我正在Visual Studio 2010 express中使用WPF c#创建一个桌面应用程序。我已经创建了一个菜单栏,我想根据用户访问级别显示某些元素。默认情况下,我可以将菜单可见性设置为隐藏,但一旦成功登录后,我发现很难将可见性设置为可见。下面是“xaml”代码和c#代码的示例 “XAML代码” <Menu Name="MenuBar" VerticalAlignment="Top" Width="Auto" Margin="0,0,0,389"> <MenuIt

我正在Visual Studio 2010 express中使用WPF c#创建一个桌面应用程序。我已经创建了一个菜单栏,我想根据用户访问级别显示某些元素。默认情况下,我可以将菜单可见性设置为
隐藏
,但一旦成功登录后,我发现很难将可见性设置为
可见
。下面是“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>
我面临的错误有:

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


您需要绑定到
样式
触发器
以获得此行为,如下所示(摘自下面的链接之一,经过修改以匹配您提供的xaml):



有关更改WPF中菜单可见性的更多信息,请参见以下两个链接:

您的代码

MenuBar.Visibility="Visible";
这是不对的

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

MenuBar.Visibility =Visibility.Visible.

你在应用程序中使用MVVM设计模式吗?嗨,科林,不,我没有,事实上我没听说过。这是我应该调查的事情吗?有没有一个好的地方,我可以寻找更多的信息,或者我应该只是谷歌?这是一个广泛使用的WPF设计模式。下面是一个介绍它的例子。如果你使用它,你的问题会很简单。希望能对你有所帮助。谢谢你,戴夫。我会让你知道你的建议。谢天谢地,这行不通——我昨晚看这篇文章时只是想确认一下。你是对的,它解决了他明确提出的问题,但不能解决他的实际问题。如果他从枚举中正确地分配了值,那么他会马上回来问“既然分配枚举不会改变可见性,我该如何让它工作?”。在大多数情况下,我倾向于同意对问题进行最少的回答,但在这种情况下,似乎应该采取下一步的回答。
<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>
MenuBar.Visibility="Visible";
MenuBar.Visibility =Visibility.Visible.