访问资源中的对象(WPF)

时间:2013-12-26 03:07:06

标签: c# wpf resources

我有以下代码,我想要的是能够访问(获取引用)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;

但首先我需要引用该对象。

1 个答案:

答案 0 :(得分:0)

以下是一个例子:

var ctx = (ContextMenu)mainListBox.FindResource("ContextMenu");
var renameMenuItem = (MenuItem)ctx.Items[6];
renameMenuItem.IsEnabled = false;

您可以在ctx.Items

中找到任何MenuItems和Separators

更新:

这是您在评论中按名称查找MenuItem的替代方法:

foreach (var item in ctx.Items)
{
    if (item is MenuItem && ((MenuItem)item).Name == "renameMenuItem")
    {
        var renameMenuItem = (MenuItem) item;
        renameMenuItem.IsEnabled = false;
    }
}