WPFのコンテキストメニューと通常のメニューの間でメニュー定義を共有するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/150150

  •  02-07-2019
  •  | 
  •  

質問

1つのページの2つの異なるメニュー間で共有したいMenuItemが定義されています。メニューには、両方のメニューで同じ機能が含まれており、2つのコピーは必要ありません。とにかくPage.ResourcesでMenuItemを定義し、下のContextMenu XAMLでそれを参照する方法はありますか?

<Page.Resources>
    <MenuItem x:Key="123"/>
</Page.Resources>

<ContextMenu>
    <MenuItem>Something hardcoded</MenuItem>

    <!-- include shared menu here -->

</ContextMenu>
役に立ちましたか?

解決

x:Shared =&quot; False&quot;を設定してこれを行いました。メニュー項目自体に。リソースはデフォルトでそれらを使用する各場所の間で共有されます(つまり、すべての使用にわたって1つのインスタンスを意味します)。したがって、それをオフにすると、新しい「コピー」リソースの毎回作成されます。

だから:

<MenuItem x:Key="myMenuItem" x:Shared="False" />

引き続き「コピー」を取得します;ですが、1か所で定義するだけで済みます。それが役立つかどうかを確認してください。メニュー定義内で次のように使用します:

<StaticResource ResourceKey="myMenuItem" />

他のヒント

あなたはミックスアンドマッチしたいので...&quot; SharedMenuItems&quot;を持つContextMenuを継承するカスタムコントロールを作成します。依存関係プロパティとMenuItems依存関係プロパティ。このようにして、コントロールはこれら2つのセットをマージする方法を決定できます。この例が必要な場合は、お知らせください。

多数のオプション: a)ContextMenuまたはMenuを同じ基になるコレクションにデータバインドし、作業にアイテムテンプレートなどを使用します。 b)コマンドを使用し、一連のコマンドバインドにデータバインドします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top