2009-12-15 2 views
3

Я нуждаясь сделать пользовательский окно с WindowStyle.None, AllowsTransparency = истинный и т.д.C# WPF - пользовательские изменения размера

Одним из требований является контроль пользовательского 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, 
    } 

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

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

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

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

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

EDIT: Microsoft сказала мне, чтобы отправить предложение продукта ...

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

Product Suggestions

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

Sample

+0

Jonathan, у меня есть эта странность, даже если я изменяю стандартное окно Win32;) ... – Anvaka

+0

Anvaka должен быть на XP, изменить свою тему на классику, чтобы понять, что я имею в виду. В Vista и выше все окна работают, потому что они имеют более продвинутые возможности рендеринга. Я могу принять мое пользовательское окно, мерцающее на XP, но мое пользовательское окно не должно мерцать на Vista и выше. – jonathanpeppers

ответ

8

Microsoft сообщает, это происходит для всех WPF выигрыша Dows.

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

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

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

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

Смежные вопросы