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

もう 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

マークアップが正しくありません。最後の2つの記号はそこにあるべきではありません:

<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 に答える