С# WPF: как развернуть окно, когда оно перетаскивается в верхнюю часть экрана

Итак, у меня есть приложение WPF, которое максимизирует окно, когда оно перетаскивается в верхнюю часть экрана.

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

Какой самый простой способ сделать это?

Заранее спасибо.


person user3410566    schedule 28.11.2014    source источник
comment
и чего же ты хочешь? остановить максимизацию окон при достижении вершины?   -  person Muhammad Faraz    schedule 28.11.2014
comment
Нет. Это так. Я просто хочу, чтобы он изменил текст в коде XAML, когда это произойдет.   -  person user3410566    schedule 28.11.2014
comment
вы не можете сделать это ниже кода, где вы вручную изменяете размер окна   -  person Muhammad Faraz    schedule 28.11.2014
comment
Может я не так объяснил как надо. Проблема в том, что значок развернутого окна на панели заголовка не меняется, если окно перетаскивается. Если я использую кнопку максимизации, она делает. В остальном это остается прежним, и это раздражает меня до чертиков. :)   -  person user3410566    schedule 28.11.2014


Ответы (1)


Вы можете проверить, установлено ли для WindowState вашего окна значение «Максимизировано». Если он развернут, вы можете соответствующим образом изменить текст.

Для этого нужно подписаться на событие SizeChanged окна и в обработчике события проверить, установлено ли для WindowState значение Maximized/Normal. Если это так, вы можете изменить текст соответствующим образом.

Я предполагаю, что вы используете пользовательское окно, пытающееся обозначить кнопки свертывания, восстановления и закрытия, используя кнопки со шрифтом "Wingdings" или другим подобным шрифтом, который имеет глифы для обозначения значков для свертывания, восстановления/разворачивания, и закрыть.

В любом случае, даже если мое предположение неверно, вы всегда можете адаптировать приведенный ниже код в соответствии со своей ситуацией.

    public CustomWindow()
    {
        SizeChanged += CustomWindow_SizeChanged;
    }

    void CustomWindow_SizeChanged(object sender, SizeChangedEventArgs e)
    {
         CheckRestoreButtonIcon();
    }

    protected void CheckRestoreButtonIcon()
    {          
        //i'm assuming that the button is named as restoreButton.
        //in wingdings, 1 is for maximized glyph, 2 is for restore glyph
        // you can always set content to whatever you want!

        if (restoreButton == null)
            return;

        if (WindowState == WindowState.Maximized)
            restoreButton.Content = "1"; //maximizee glyph
        else
            restoreButton.Content = "2";//restore glyph
    }
person Bharat Mallapur    schedule 22.01.2015
comment
Также обратите внимание, что этот эффект максимизации при перетаскивании в верхнюю часть экрана присутствует не во всех операционных системах Windows. Это функция под названием Aero Snap, присутствующая в Windows 7 и более поздних версиях. windows.microsoft.com/en-IN/windows7/products/features/ привязка - person Bharat Mallapur; 22.01.2015