次のようなユーザー コントロールがあります。
<UserControl x:Class="MyApp.UserControls.MyContextMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
ContextMenuOpening="OnContextMenuOpening"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.ContextMenu>
<ContextMenu>
...
</ContextMenu>
</UserControl.ContextMenu>
</UserControl>
私の質問は、データ グリッドのようなものにそのコンテキスト メニューをどのように使用するかです。
<DataGrid ContextMenu="{usercontrols:MyContextMenu}"
残念ながら、指定された値が正しくなく、ContextMenu
.
注:いくつかの場所でコンテキスト メニューを再利用する必要があるため、独自のファイルに入れました。OnContextMenuOpening
また、メニューを開いたときにメニューに関するいくつかの作業を行う必要があり、残念ながらコンテキストメニューに対してイベントが発生しないため、イベントをリッスンできる必要があります: http://connect.microsoft.com/VisualStudio/feedback /details/353112/contextmenu-opening-event-doesnt-fire-properly
「ContextMenu 自体は FrameworkElement 派生クラスですが、このイベントは、ソースとして開かれているコンテキスト メニューからは発生しません。このイベントは、コンテキスト メニューをプロパティとして "所有" する要素から発生し、ユーザーがUI でコンテキスト メニューを開こうとしています。」
このイベントの問題が、ユーザー コントロールのメニューを配置した理由です。これにより、ユーザー コントロールはイベントを取得して作業を行うことができます。
更新:ルート要素として使用し、コンテキスト メニューを拡張しようとしました:
コードビハインド:
しかし、私は得ています: ContextMenu cannot have a logical or visual parent
.