Как?Окно WPF - развернуто, без изменения размера / перемещения - PullRequest
11 голосов
/ 23 июля 2010

Я пытаюсь сделать окно WPF, которое открывается уже развернуто, без изменения размера / перемещения (ни в системном меню, ни в рамке).Это должно быть максимизировано все время, кроме случаев, когда пользователь минимизирует его.

Я пытался поставить WindowState = "Maximized" и ResizeMode = "CanMinimize", но когда окно открывается, оно покрывает панель задачне хочу).

У меня есть крючок для WndProc, который отменяет SC_MOVE и SC_SIZE.Я также могу сделать этот элемент управления с помощью условий в WndProc, таких как «если команда является восстановлением и свернуто, восстановить, еще, блокировать» и т. Д.

Но я хочу сказать, если у нас есть другой способ сделать это.Спасибо за прочитанное, ребята =)

Ответы [ 4 ]

16 голосов
/ 28 марта 2013

Необходимо написать WindowState="Maximized" ResizeMode="NoResize" в xaml вашего окна:

<Window x:Class="Miscellaneous.EditForm"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Edit Form" WindowState="Maximized" ResizeMode="NoResize"></Window>
3 голосов
/ 26 января 2013
    public Window1()
    {
         InitializeComponent();

          this.SourceInitialized += Window1_SourceInitialized;
    }

    private void Window1_SourceInitialized(object sender, EventArgs e)
    {
        WindowInteropHelper helper = new WindowInteropHelper(this);
        HwndSource source = HwndSource.FromHwnd(helper.Handle);
        source.AddHook(WndProc);
    }

    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xF010;

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {

        switch (msg)
        {
            case WM_SYSCOMMAND:
                int command = wParam.ToInt32() & 0xfff0;
                if (command == SC_MOVE)
                {
                    handled = true;
                }
                break;
            default:
                break;
        }
        return IntPtr.Zero;
    }
1 голос
/ 11 января 2016
WindowState="Maximized"
ResizeMode="NoResize"
WindowStyle="None"

WindowStyle = "None" делать то, что вы хотите, но ... вы теряете заголовок окна, кнопку закрытия и другие проблемы.

Visit WindowStyle = "None" некоторые проблемы

1 голос
/ 01 августа 2010

Как отметил Tergiver, это невозможно в чисто WPF-стиле. Вы должны использовать P / Invoke. Что касается того, почему окно закрывает панель задач, когда она открывается, я думаю, что вы путаете некоторые необходимые вызовы, отменяя SC_MOVE и SC_SIZE. Возможно, вам следует отменить эти вызовы после загрузки окна.

...