WPF - Изменение размеров окон без хрома с использованием прикрепленного поведения. Есть предложения? - PullRequest
1 голос
/ 28 сентября 2010

Кто мечтает о вызове?

В настоящее время я работаю над ControlTemplate для бесхромного Window, который будет частью многократно используемой тематической сборки. Я хочу, чтобы поведение для перемещения, закрытия, минимизации и восстановления было неявным, поэтому я написал прикрепленное поведение для этой функции, которое затем включил в шаблон.

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

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

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

Последний вариант - каким-то образом нарисовать прямоугольник на экране, показывающий, что Window будет подниматься при перетаскивании мыши, а затем изменяет размер на MouseUp, .., что кажется выполнимым, но это не то, что я сделано раньше, так что некоторые указатели на это было бы круто.

Итак, что мне делать? Маршрут Win32 пока кажется мне лучшим вариантом, но я бы предпочел, чтобы у кого-то было «более чистое» решение, которое работает. Я рад получить предложения с вариантом 3 и всем, вплоть до .Net 4 на случай, если возможно будет какое-то волшебство dynamic.

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

...