C # WPF - изменение размера - PullRequest
3 голосов
/ 16 декабря 2009

Мне нужно создать собственное окно с WindowStyle.None, AllowsTransparency = true и т. Д.

Одним из требований является пользовательский элемент управления ResizeGrip.

Я работаю с ResizeMode.CanResizeWithGrip, используя некоторый код из проекта с открытым исходным кодом, найденного здесь: Fluid Kit

См. Класс "GlassWindow", если вам интересно.

Чтобы сделать эту работу, я вызываю следующий код для события MouseLeftButtonDown ResizeGrip:

NativeMethods.SendMessage(_interopHelper.Handle, WM.SYSCOMMAND, (IntPtr)((int)SC.SIZE + (int)sizingAction), IntPtr.Zero);

SizingAction определяется как:

    enum SizingAction
    {
        West = 1,
        East = 2,
        North = 3,
        NorthWest = 4,
        NorthEast = 5,
        South = 6,
        SouthWest = 7,
        SouthEast = 8,
    }

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

Если вы попробуете это для любого окна со стилем окна по умолчанию и режимом изменения размера, оно будет работать просто отлично. За исключением XP, вы должны иметь классическую тему.

Кто-нибудь знает альтернативу этому? Или способ это исправить?

Я также разместил некоторую информацию на форумах MSDN, здесь: Форумы MSDN

PS - Вы можете увидеть это поведение на собственном опыте, если кто-то захочет проверить комплект Fluid и запустить пример GlassWindow, установив StartupUri = "GlassWindow / Window1.xaml" в своем примере проекта.

РЕДАКТИРОВАТЬ: Microsoft сказал мне, чтобы отправить предложение продукта ...

Ссылка здесь, если у кого-то есть подобная проблема:

Предложения по продукту

Я также привожу здесь пример, если вы хотите попробовать это из первых рук:

Sample

1 Ответ

8 голосов
/ 04 января 2010

Microsoft сообщает, что это происходит со всеми WPF-окнами.

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

Если для WindowStyle установлено значение None, то WPF рендерит все окно, и поэтому это мерцание становится более заметным, поскольку мерцает все окно.

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

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

...