我对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并在代码中设置其可见性?
答案 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。