我有以下代码,我想要的是能够访问(获取引用)ListBox资源中的MenuItem对象,但我不知道如何。
<ListBox Grid.Column="1" Grid.Row="1" MouseDoubleClick="MainListBox_MouseDoubleClick" Name="mainListBox" SelectionChanged="MainListBox_SelectionChanged">
<ListBox.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Click="OpenMenuItem_Click" Header="Open" Name="openMenuItem"/>
<Separator/>
<MenuItem Click="CutMenuItem_Click" Header="Cut" Name="cutMenuItem"/>
<MenuItem Click="CopyMenuItem_Click" Header="Copy" Name="copyMenuItem"/>
<Separator/>
<MenuItem Click="DeleteMenuItem_Click" Header="Delete" Name="deleteMenuItem"/>
<MenuItem Click="RenameMenuItem_Click" Header="Rename" Name="renameMenuItem"/>
</ContextMenu>
</ListBox.Resources>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我希望能够做到这样的事情:
renameMenuItem.IsEnabled = false;
但首先我需要引用该对象。
答案 0 :(得分:0)
以下是一个例子:
var ctx = (ContextMenu)mainListBox.FindResource("ContextMenu");
var renameMenuItem = (MenuItem)ctx.Items[6];
renameMenuItem.IsEnabled = false;
您可以在ctx.Items
更新:
这是您在评论中按名称查找MenuItem的替代方法:
foreach (var item in ctx.Items)
{
if (item is MenuItem && ((MenuItem)item).Name == "renameMenuItem")
{
var renameMenuItem = (MenuItem) item;
renameMenuItem.IsEnabled = false;
}
}