friend12king Ответов: 1

Отключите contxtmenu, если мы используем & lt;windowchrome. windowchrome>


Я не могу отключить его, если использую WindowChrome.Стиль WindowChrome. Пожалуйста, дайте мне знать ваш вклад в решение этой проблемы. Без WindowChrome я могу отключить контекстное меню с помощью того же фрагмента кода.

Что я уже пробовал:

<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">
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="35"
                      CornerRadius="0"
                      ResizeBorderThickness="5"
                      UseAeroCaptionButtons="False" 
         />
    </WindowChrome.WindowChrome>
    <Window.Resources>

    </Window.Resources>
    <Grid>

    </Grid>
</Window>
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;
        }        
    }              

1 Ответов

Рейтинг:
2

Graeme_Grant

Этот поиск в Google: WPF отключить контекстное меню окна-поиск Google[^] имеет много решений для вас, включая это: wpf-отключить все контекстное меню - переполнение стека[^]