Как сделать приложение WPF полноэкранным? - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь найти способ сделать приложение WPF полноэкранным, как в Direct3D, без использования Direct3D. Эта статья демонстрирует, как сделать большую часть того, что я ищу. Тем не менее, в нем отсутствуют две вещи, которые я должен знать, как этого достичь.

  1. Вышеупомянутая статья - это то, что в большинстве случаев вы бы назвали полноэкранной рамкой или окном без границ. Чтобы быть ясно понятным, это позволяет курсору мыши покидать окно при использовании нескольких мониторов. Я не могу этого сделать (да, но это отдельный «режим», как вы могли бы видеть в большинстве видеоигр).

  2. Представленное решение также должно быть признано ОС как полноэкранное приложение, чтобы Windows 10 функций, таких как Focus Assist, работали должным образом.

Я искал решения для этого и прочитал много статей, хотя ни одна из них действительно не отвечает на мой вопрос. Тот, который я упомянул выше, наиболее близок к тому, что я ищу, он удовлетворительно ответил на большинство моих вопросов, касающихся этого, таких как покрытие меню «Пуск», но эти два пункта остались без ответа.

Соответствующие части MainWindow класс будет выглядеть примерно так. Что мне нужно знать, так это как заставить курсор оставаться в границах главного окна и как ОС рассматривает главное окно как полноэкранное приложение. Что касается первой части с курсором, подписывающимся и обрабатывающим событие MouseLeave, похоже, именно то, что я хочу, однако мне еще предстоит найти способ предотвратить его выход из окна (см. TODO ниже в обработчике событий).

MainWindow.xaml

<NavigationWindow x:Class="MyApp.Client.Windows.Windows.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                  mc:Ignorable="d"
                  Title="My App"
                  Background="#353535"
                  Width="1920" Height="1080"
                  WindowStyle="None"
                  ResizeMode="NoResize"
                  WindowState="Maximized"
                  WindowStartupLocation="CenterScreen"
                  ShowsNavigationUI="False"
                  MouseLeave="MainWindow_OnMouseLeave">
</NavigationWindow>

MainWindow.xaml.cs

public partial class MainWindow
{
    #region Constructors

    public MainWindow()
    {
        InitializeComponent();
    }

    #endregion

    #region Methods

    private void MainWindow_OnMouseLeave(object sender, MouseEventArgs e)
    {
        if (Application.Current.MainWindow == null) return;

        Rect windowBounds = new Rect(new Size(Application.Current.MainWindow.Width, Application.Current.MainWindow.Height));   

        Point mousePosition = Mouse.GetPosition(this);

        if (mousePosition.X > windowBounds.X || mousePosition.Y > windowBounds.Y || mousePosition.X < 0 || mousePosition.Y < 0)
        {
            // TODO: Force cursor to stay within window bounds.
        }
    }

    #endregion
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...