WindowChrome - 如何修改或禁用标题栏中的上下文菜单?

Posted

技术标签:

【中文标题】WindowChrome - 如何修改或禁用标题栏中的上下文菜单?【英文标题】:WindowChrome - How to modify or disable context menu in the title bar? 【发布时间】:2015-08-25 16:03:42 【问题描述】:

我需要在使用 WindowChrome 的 WPF 窗口的标题栏中禁用上下文菜单:

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        ContextMenu="x:Null">
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="35"
                      CornerRadius="0"
                      ResizeBorderThickness="5"
                      UseAeroCaptionButtons="False" />
    </WindowChrome.WindowChrome>
</Window>

ContextMenu="x:Null" 不起作用。 以下说明也不起作用: http://codereply.com/answer/7etz8e/remove-title-bars-context-menu-completely-wpf-window.html 标题栏中的上下文菜单始终没有变化。 有人有想法吗?

【问题讨论】:

【参考方案1】:
public partial class MainWindow : Window

    public MainWindow()
    
        InitializeComponent();
        Loaded += OnLoaded;
    

    private void OnLoaded(object sender, RoutedEventArgs e)
    
        IntPtr windowhandle = new WindowInteropHelper(this).Handle;
        HwndSource hwndSource = HwndSource.FromHwnd(windowhandle);
        hwndSource.AddHook(new HwndSourceHook(WndProc));
    

    private const uint WM_SYSTEMMENU = 0xa4;
    private const uint WP_SYSTEMMENU = 0x02;

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    
        if ((msg == WM_SYSTEMMENU) && (wParam.ToInt32() == WP_SYSTEMMENU))
        
            handled = true;
        

        return IntPtr.Zero;
    

【讨论】:

虽然这可能会回答问题,但最好解释一下您的代码的作用,因为这对所有读者来说可能并不明显。此外,您应该再次查看代码的格式化输出并更正第一行。

以上是关于WindowChrome - 如何修改或禁用标题栏中的上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章

WPF中自定义标题栏时窗体最大化处理之WindowChrome

如何使用 PHP 或 JavaScript/jQuery 禁用地址栏?

[WPF自定义控件库]使用WindowChrome自定义RibbonWindow

如何在 TreeView 中禁用或修改 TreeCell 的填充

如何手动启用或禁用键盘上的 Return 键?

如何修复正在修改或禁用设备上 SELinux 的应用以重新提交到 Google Play