私は長方形をrectangle
持っています。カスタムがありますcontextmenu
(の内で行われたいくつかの簡単な変更だけControlTemplae
です<ContextMenu.Template>
)。私が欲しいのは、マウスの左クリックで、contextmenu
ポップアップします。
rectangle1.contextmenu.isopen=true
長方形のMouseDown
イベントに追加してみました。はい、開きますcontextmenu
。ただし、長方形のcontextmenu
上(上)に開く/ポップアップするように設定されているContextMenuService.Placement="top"
ので、長方形のXAMLに追加するだけで実行できますrectangle1.contextmenu.isopen=true
。長方形のMouseDown
イベントがcontextmenu
ポップアップしますが、間違った場所にあると、それ以上上に留まらず、マウスに追従します。たとえば、長方形の右隅をクリックすると、右にcontextmenu
開く/ポップアップします。これは振る舞いはとても奇妙です、なぜこれが起こっているのか分かりません。
とにかく、contextmenu
マウスの左クリックで長方形の上部にあるを開くにはどうすればよいですか?
更新
奇妙なことに、どのコードにどのコードを追加してもmouseevent
、コンテキストメニューの配置が失われます。たとえばMsgBox("abc")
、mouseDownイベントを追加してから長方形を右クリックすると、コンテキストメニューが上に表示されません。
MSDNリファレンスContextMenu.Placementからわかるように
ContextMenuがFrameworkElement.ContextMenuまたはFrameworkContentElement.ContextMenuプロパティに割り当てられている場合、ContextMenuServiceは、ContextMenuが開いたときにこのプロパティのこの値を変更します。ユーザーがマウスを使用してContextMenuを開くと、配置はMousePointに設定されます。ユーザーがキーボードを使用してコンテキストメニューを開くと、配置は中央に設定されます。ContextMenuの位置を変更する場合は、FrameworkElementまたはFrameworkContentElementでContextMenuService.Placementプロパティを設定します。
したがって、ContextMenuServiceを介して行わないため、PlacementとPlacementTargetを自分で変更する必要があります。
private void Mouse_Down(object sender, MouseButtonEventArgs e)
{
var cm = ContextMenuService.GetContextMenu(sender as DependencyObject);
if (cm==null)
{
return;
}
cm.Placement = PlacementMode.Top;
cm.PlacementTarget = sender as UIElement;
cm.IsOpen = true;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加