WPF+Caliburn Micro右键菜单点击后立即消失问题求助
问题原因
你遇到的问题是MouseDown事件触发后,Button的默认点击行为会继续执行,导致ContextMenu刚打开就失去焦点,进而被关闭。即使设置了StaysOpen="true",也无法阻止这种因事件冒泡引发的关闭行为。
解决方案
步骤1:修改ViewModel方法,处理事件参数
在ViewModel的CogButtonClick方法中添加MouseButtonEventArgs参数,标记事件已处理,阻止事件继续传播:
using System.Windows.Controls; using System.Windows.Input; public void CogButtonClick(object sender, MouseButtonEventArgs e) { // 阻止事件冒泡,避免Button默认行为干扰菜单显示 e.Handled = true; var button = sender as Button; button?.ContextMenu.IsOpen = true; }
步骤2:更新XAML中的ActionMessage,传递事件参数
修改XAML里的ActionMessage,添加$eventArgs参数,把事件对象传递给ViewModel方法:
<Image Source="/Images/TrayCogIcon.png"> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseDown"> <cal:ActionMessage MethodName="CogButtonClick"> <cal:Parameter Value="{Binding ElementName=cogButton}" /> <cal:Parameter Value="$eventArgs" /> </cal:ActionMessage> </i:EventTrigger> </i:Interaction.Triggers> </Image>
额外优化
如果只需要左键点击触发菜单,可以把EventName改成PreviewMouseLeftButtonDown,更精准地响应左键操作;同时确保ContextMenu的StaysOpen="true"设置没有被其他代码或样式覆盖。
内容的提问来源于stack exchange,提问作者jwright755
相关产品推荐
相关产品推荐

