You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF+Caliburn Micro右键菜单点击后立即消失问题求助

解决WPF+Caliburn Micro中ContextMenu打开后立即消失的问题

问题原因

你遇到的问题是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:36:22