0

我有一个在 XAML 中定义的嵌套上下文菜单的图像(如下所示)。

我正在尝试使用 for 循环查找菜单并使用 IsChecked=false 取消选中它。

我的代码如下:

for (int i = 1; i <= 16; i++)
        {
            MenuItem theMenu = (MenuItem)this.FindName("beat" + i.ToString());
            theMenu.IsChecked = false;
        }

以上不起作用并返回null。

我究竟做错了什么!

摘自 XAML

<Image x:Name="Options" Height="35" Source="Images/pad-options-button.png" Stretch="Fill" Width="47" Canvas.Left="740" Canvas.Top="293"
           MouseUp="Options_MouseUp">
        <Image.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Beats">
            <MenuItem Name="beat1" Header="1" Click="MenuBeats_Click"/>
            <MenuItem Name="beat2" Header="2" Click="MenuBeats_Click"/>
            <MenuItem Name="beat3" Header="3" Click="MenuBeats_Click"/>
            <MenuItem Name="beat4" Header="4" Click="MenuBeats_Click"/>
            <MenuItem Name="beat5" Header="5" Click="MenuBeats_Click"/>
            <MenuItem Name="beat6" Header="6" Click="MenuBeats_Click"/>
            <MenuItem Name="beat7" Header="7" Click="MenuBeats_Click"/>
            <MenuItem Name="beat8" Header="8" Click="MenuBeats_Click"/>/>
            <MenuItem Name="beat9" Header="9" Click="MenuBeats_Click"/>
            <MenuItem Name="beat10" Header="10" Click="MenuBeats_Click"/>
            <MenuItem Name="beat11" Header="11" Click="MenuBeats_Click"/>
            <MenuItem Name="beat12" Header="12" Click="MenuBeats_Click"/>
            <MenuItem Name="beat13" Header="13" Click="MenuBeats_Click"/>
            <MenuItem Name="beat14" Header="14" Click="MenuBeats_Click"/>
            <MenuItem Name="beat15" Header="15" Click="MenuBeats_Click"/>
            <MenuItem Name="beat16" Header="16" Click="MenuBeats_Click"/>
        </MenuItem>
        <MenuItem Header="Beat Type">
            <MenuItem Name="Whole" Header="Whole" Click="MenuBeatType_Click"/>
            <MenuItem Name ="Half" Header="Half" Click="MenuBeatType_Click"/>
            <MenuItem Name ="Quarter" Header="Quarter" Click="MenuBeatType_Click"/>
            <MenuItem Name ="Eighth" Header="Eighth" Click="MenuBeatType_Click"/>
            <MenuItem Name ="Sixteenth" Header="Sixteenth" Click="MenuBeatType_Click"/>
        </MenuItem>
    </ContextMenu>
</Image.ContextMenu>
    </Image>
</Canvas>
4

3 回答 3

1

另一种选择是从图像中获取上下文菜单。

var items = Options.ContextMenu.Items
foreach(MenuItem item in items)
{ 
    // do your work with the item 
}

请注意,您将不得不处理子项目!您的箱子中只有 2 件物品

于 2012-06-28T19:10:17.827 回答
0

您的标记不正确。最后两个符号不应该存在:

<MenuItem Name="beat8" Header="8" Click="MenuBeats_Click"/>/>

但是,您的示例非常适合我,但是带有意外项目:

"/>"

于 2012-06-28T19:01:43.800 回答
0

只是在代码后面的类的构造函数中写NameScope.SetNameScope(contextMenu, NameScope.GetNameScope(this));contextMenu 是图像上下文菜单的名称。实际上 ContextMenu 不是 Visual 树的一部分,因此它找不到名称。但是上面的代码行将在可视树范围内设置上下文菜单,因此会找到名称。希望这会有所帮助。

于 2012-06-28T19:06:18.747 回答