编辑本地资源在代码隐藏中的可见性

时间:2015-10-08 19:53:10

标签: c# wpf

我对WPF很新,并且一直在努力寻找答案,所以也许我会以错误的方式解决这个问题。

我有一个ContextMenu,我希望使用多个地方,所以我把它定义为资源:

<Window.Resources>
    <ContextMenu x:Key="MainContextMenu">
        <MenuItem Header="Select All"        Click="SelectAllButton_Click"/>
        <MenuItem Header="Clear All"         Click="ClearAllButton_Click"/>
        <MenuItem Header="Export"            Click="ExportButton_Click"     Name="ExportCM"/>
        <MenuItem Header="Priority"          Click="PriorityButton_Click"   Name="PriorityCM"/>
        <MenuItem Header="Cancel"            Click="CancelButton_Click"     Name="CancelCM"/>
        <MenuItem Header="Reallocate"        Click="ReallocateButton_Click" Name="ReallocateCM"/>
        <MenuItem Header="Release"           Click="ReleaseButton_Click"    Name="ReleaseCM"/>
        <MenuItem Header="Hazard"            Click="HazardButton_Click"     Name="HazardCM"/>
        <MenuItem Header="Reset"             Click="ResetButton_Click"      Name="ResetCM"/>
    </ContextMenu>
</Window.Resources>

我还有一个菜单,其中的项目具有相同的标题和点击处理程序,但菜单不是资源,因为我只需要放置一次。通过菜单,我可以编辑代码隐藏中某些MenuItem的可见性。我希望能够对我的ContextMenu做同样的事情。

如果我的ContextMenu是本地定义的静态资源,如何访问单个ContextMenu MenuItem并在代码中设置其可见性?

2 个答案:

答案 0 :(得分:0)

ContextMenu ctxmenu = (ContextMenu)this.Resources["MainContextMenu"];

如果您将此上下文菜单指定为Button:Btn1,那么Btn1.ContextMenu将为您提供按钮Btn1的上下文菜单。

要访问特定的菜单项,您可以使用btn1.ContextMenu.Items个集合。

答案 1 :(得分:0)

您正在寻找WPF中的自定义控件。您可以扩展WPF控件,您可以在其中添加所有菜单/菜单项并使用XAML将它们作为对象处理。

http://wpftutorial.net/HowToCreateACustomControl.html

执行此操作后,在要使用自定义菜单的窗口内,您需要添加命名空间,如:

xmlns:controls="clr-namespace:YourProject.YourControl"

然后您就可以使用这样的菜单:

<controls:YourControl>

另请参阅DataTemplates。