首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WindowChrome.WindowChrome禁用上下文菜单

使用WindowChrome.WindowChrome禁用上下文菜单
EN

Stack Overflow用户
提问于 2017-03-14 05:17:41
回答 2查看 366关注 0票数 1

如果使用ContextMenu样式,则无法禁用WindowChrome.WindowChrome。请让我知道您的意见,以解决这个问题。没有WindowChrome,我就可以使用相同的代码来禁用上下文菜单。

代码语言:javascript
复制
    <Window x:Class="ConextMenu_Sample.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">
        <WindowChrome.WindowChrome>
            <WindowChrome CaptionHeight="35"
                          CornerRadius="0"
                          ResizeBorderThickness="5"
                          UseAeroCaptionButtons="False" />
        </WindowChrome.WindowChrome>
        <Grid>

        </Grid>
    </Window>

代码背后

代码语言:javascript
复制
        public partial class MainWindow : Window
        {
            private const uint WP_SYSTEMMENU = 0x02;
            private const uint WM_SYSTEMMENU = 0xa4;
            public MainWindow()
            {
                InitializeComponent();
                Loaded += OnLoaded;
            }

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

            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;
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-14 05:37:59

使用此代码:

您需要设置窗口样式属性None。

属性:- WindowStyle = "None“

代码语言:javascript
复制
<Window x:Class="ConextMenu_Sample.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" WindowStyle="None">

代码语言:javascript
复制
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
        {
            if ((msg == WM_SYSTEMMENU) && (wparam.ToInt32() == WP_SYSTEMMENU))
            {
                handled = false;  // Change the Boolean Value to false // 
            }
            return IntPtr.Zero;
        }
票数 0
EN

Stack Overflow用户

发布于 2017-08-22 06:40:27

也许你不需要这个,但我解决了它,想把它分享给需要它的人。

代码语言:javascript
复制
if (((msg == WM_SYSTEMMENU) && (wParam.ToInt32() == WP_SYSTEMMENU)) || msg == 165){
    //ShowContextMenu();
    handled = true;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42778240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档