WPFのコンテキストメニューと通常のメニューの間でメニュー定義を共有するにはどうすればよいですか
質問
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)コマンドを使用し、一連のコマンドバインドにデータバインドします
所属していません StackOverflow