私は、次の受け入れ答えを持っている、hereを発見したもののような様々なソリューションを、しようとしていますWPFでコンテキストメニューの終了イベントを購読するにはどうすればよいですか?
<Button ContextMenuClosing="ContextMenu_ContextMenuClosing">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Go"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
しかし、上記のソリューションを導入した後、私はまだ、のContextMenuClosingイベントに失敗しリスニングされていますどのように閉じているか(選択、親ボタンをクリック、メニューまたはボタンのどこかをクリックする)。以下は私のコードですが、何が間違っていますか? ContextMenuClosing
私には未知の理由のために
TestPage.xaml
<Page x:Class="MyProject.pages.TestPage"
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"
xmlns:local="clr-namespace:MIMOUI.pages"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300"
Title="TestPage">
<Grid>
<Button x:Name="myMenuButton"
Width="140"
Height="100"
Click="myMenuButton_Click"
ContextMenuClosing="myMenuButton_ContextMenuClosing"
Background="NavajoWhite"
Foreground="BurlyWood">
<Button.ContextMenu>
<ContextMenu x:Name="myMenuButton_ContextMenu" Width="250">
<MenuItem x:Name="myTaskMenuButton" Header="TASKS" />
<MenuItem x:Name="myTransactionButton" Header="TRANSACTION" />
<MenuItem x:Name="mySetupMenuButton" Header="SETUP" />
</ContextMenu>
</Button.ContextMenu>
</Button>
</Grid>
</Page>
TestPage.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
namespace MyProject.pages {
public partial class TestPage : Page {
public TestPage() {
InitializeComponent();
}
public void myMenuButton_Click(object sender, RoutedEventArgs e) {
(sender as Button).ContextMenu.IsOpen = true;
}
public void myMenuButton_ContextMenuClosing(object sender, RoutedEventArgs e) {
Console.WriteLine("intercepted!!!!");
e.Handled = true;
}
}
}
私はコンソールの代わりにMessageBox()を使用して同じ結果を得ました。あなたが正しい解決策を見つけたようです。よろしくお願いいたします –
ありがとうございます!残念なことに、私は自分の問題の大部分について言及することを忘れていました。私は閉会のイベントを傍受し、起きるのを止める必要があるので、私はe.Handledを真に設定しているのです。おそらく、閉鎖されたイベントでは、私はコンテキストメニューを単に開くことができるので、イベントをキャプチャしても私は戦いの半分を勝ち取っています。 –