Ged*_*dde 5 c# wpf contextmenu wpf-controls
当我使用打开上下文菜单时<control>.ContextMenu.IsOpen = true,上下文菜单将变为可见,但是打开或关闭事件均不会触发。
以编程方式打开上下文菜单时,如何确保ContextMenuOpeningand ContextMenuClosing事件引发?
看下面的XAML
<Button Name="ContextMenuButton"
Content="Click me!"
Click="ContextMenuButton_Click"
ContextMenuOpening="ContextMenuButton_OnContextMenuOpening"
ContextMenuClosing="ContextMenuButton_OnContextMenuClosing">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="First element" />
<MenuItem Header="Second element" />
</ContextMenu>
</Button.ContextMenu>
</Button>
Run Code Online (Sandbox Code Playgroud)
和下面的代码
public MainWindow() // Constructor
{
InitializeComponent();
ContextMenuButton.ContextMenuOpening += (sender, args) => Debug.Print("Opening #2");
ContextMenuButton.ContextMenuClosing += (sender, args) => Debug.Print("Closing #2");
}
private void ContextMenuButton_Click(object sender, RoutedEventArgs e)
{
Button button = (sender as Button);
button.ContextMenu.IsOpen = true; // How should I open the ContextMenu?
}
private void ContextMenuButton_OnContextMenuOpening(object sender, ContextMenuEventArgs e)
{
Debug.Print("Opening #1");
}
private void ContextMenuButton_OnContextMenuClosing(object sender, ContextMenuEventArgs e)
{
Debug.Print("Closing #1");
}
Run Code Online (Sandbox Code Playgroud)
上下文菜单打开。
输出为:
Opening #1
Opening #2
Closing #1
Closing #2
Run Code Online (Sandbox Code Playgroud)
上下文菜单打开。
输出为:
<Nothing>
Run Code Online (Sandbox Code Playgroud)
问题是您已在 Button 的 ContextMenuOpening 上附加了事件,并且由于您手动调用 ContextMenu,因此事件未触发
因此,要获取事件,请附加 ContextMenu 中的 Opened 和 Closed 事件
public MainWindow() // Constructor
{
InitializeComponent();
ContextMenuButton.ContextMenu.Opened += (sender, args) => Debug.Print("Opening #2");
ContextMenuButton.ContextMenu.Closed += (sender, args) => Debug.Print("Closing #2");
}
Run Code Online (Sandbox Code Playgroud)
xaml
<Button Name="ContextMenuButton"
Content="Click me!"
Click="ContextMenuButton_Click" >
<Button.ContextMenu>
<ContextMenu Opened="ContextMenuButton_OnContextMenuOpening" Closed="ContextMenuButton_OnContextMenuClosing">
<MenuItem Header="First element" />
<MenuItem Header="Second element" />
</ContextMenu>
</Button.ContextMenu>
</Button>
Run Code Online (Sandbox Code Playgroud)
事件,ContextMenuEventArgs 更改为 RoutedEventArgs
private void ContextMenuButton_OnContextMenuOpening(object sender, RoutedEventArgs e)
{
Debug.Print("Opening #1");
}
private void ContextMenuButton_OnContextMenuClosing(object sender, RoutedEventArgs e)
{
Debug.Print("Closing #1");
}
Run Code Online (Sandbox Code Playgroud)
按钮点击保持不变。
这应该可以解决你的问题
| 归档时间: |
|
| 查看次数: |
4326 次 |
| 最近记录: |