Почему все мои приложения WPF не перетаскиваются за пределы своих окон, начиная с Windows 10 (1809/1903), такие как изменение размера окна или перетаскивание? - PullRequest
5 голосов
/ 29 мая 2019

Однажды я обнаружил, что все мои приложения WPF не смогли перетащить за пределы окон, и я не могу изменить размер ни одного окна с предварительным просмотром в реальном времени.

Мой вопрос: почему это происходит и как я могу это решить?


Вы можете просмотреть анимационное изображение, показанное ниже:

Cannot resize outside the window

Visual Studio resizing demo

Вы можете заметить, что когда мой курсор находится за пределами окна, изменение размера немедленно прекращается, и окно сохраняет размер, когда курсор впервые покидает окно. Если курсор снова входит в область окна, а изменение размера окна возобновляется.

Воспроизводятся не только все написанные мной приложения WPF, но и другие приложения WPF:

  • Visual Studio 2017/2019
  • Snoop
  • ScreenToGif
  • 1029 * Etc. *

Приложения, не являющиеся WPF, работают правильно.

Это явление происходит несколько месяцев назад, так как моей системной версией была Windows 10 (1809), а сейчас моей системной версией является Windows 10 (1903), и эта проблема остается на месте. Приложение WPF, встроенное из .NET Framework 3.5 / 4.5 / 4.8 и .NET Core 3.0.


Update1 : Я только что очистил все свои диски и переустановил Windows 10 Professional (1903, версия для клиентов) с некоторыми основными приложениями, проблема все еще существует. Основными приложениями являются Chrome, PalmInput IME, iTunes.

Update2 : Я написал приложение WPF для обработки сообщений окна. Я обнаружил, что сообщение 49757 перестанет получать, когда я изменю размеры окна за его пределами. Сообщение работает нормально в системе моего друга.

1 Ответ

0 голосов
/ 21 июля 2019

Обновление:

Как указали членами команды WPF, рекомендуемый способ отключения поддержки стилуса и сенсорной панели в WPF - использование Switch.System.Windows.Input.Stylus.DisableStylusAndTouchSupportзначение App.config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.DisableStylusAndTouchSupport=true" />
  </runtime>  
</configuration>

Также обратите внимание, что это не решение, а обходной путь, который может не подходить для всех сценариев.

Оригинал:

Маркус Айзенсток нашел решение вокруг для этой проблемы.Отключив поддержку планшета в WPF, вы получите ожидаемое поведение.Я проверил, и он работает на моем компьютере (Windows 10 версии 1903 и .NET Framework 4.6.2): ​​

public static void DisableWpfTabletSupport()
{
    // Get a collection of the tablet devices for this window.    
    TabletDeviceCollection devices = System.Windows.Input.Tablet.TabletDevices;


    if (devices.Count > 0)
    {
        // Get the Type of InputManager.  
        Type inputManagerType = typeof(System.Windows.Input.InputManager);


        // Call the StylusLogic method on the InputManager.Current instance.  
        object stylusLogic = inputManagerType.InvokeMember("StylusLogic",
                    BindingFlags.GetProperty | BindingFlags.Instance | 
                    BindingFlags.NonPublic,
                    null, InputManager.Current, null);


        if (stylusLogic != null)
        {
            // Get the type of the stylusLogic returned 
            // from the call to StylusLogic.  
            Type stylusLogicType = stylusLogic.GetType();


            // Loop until there are no more devices to remove.  
            while (devices.Count > 0)
            {
                // Remove the first tablet device in the devices collection.  
                stylusLogicType.InvokeMember("OnTabletRemoved",
                        BindingFlags.InvokeMethod | 
                        BindingFlags.Instance | BindingFlags.NonPublic,
                        null, stylusLogic, new object[] { (uint)0 });
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...