c# – 如何以编程方式打开上下文菜单时引发ContextMenuOpening事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何以编程方式打开上下文菜单时引发ContextMenuOpening事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2417字,纯文字阅读大概需要4分钟。
内容图文
当我打开带有< control> .ContextMenu.IsOpen = true的上下文菜单时,上下文菜单变为可见,但是没有触发打开或关闭事件.
当我以编程方式打开上下文菜单时,如何确保引发ContextMenuOpening和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>
以下代码隐藏
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");
}
右键单击按钮时的行为:
上下文菜单正在打开.
输出是:
Opening #1
Opening #2
Closing #1
Closing #2
左键单击按钮时的行为:
上下文菜单正在打开.
输出是:
<Nothing>
解决方法:
问题是您在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");
}
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>
事件,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");
}
按钮单击保持不变.
这应该可以解决你的问题
内容总结
以上是互联网集市为您收集整理的c# – 如何以编程方式打开上下文菜单时引发ContextMenuOpening事件全部内容,希望文章能够帮你解决c# – 如何以编程方式打开上下文菜单时引发ContextMenuOpening事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。