2009-12-15 113 views
3

我需要做出與WindowStyle.None,AllowsTransparency = TRUE,等自定義窗口C#WPF - 自定義縮放

一個要求是一個自定義ResizeGrip控制。

我有這方面的工作與ResizeMode.CanResizeWithGrip,採取了一些代碼從這裏找到一個開源項目:Fluid Kit

參見「GlassWindow」類,如果你有興趣。

做的工作,我呼籲ResizeGrip的MouseLeftButtonDown事件下面的代碼:

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結帳流體包,並通過設置的StartupUri =「GlassWindow /窗口1運行GlassWindow例子.xaml「在他們的示例項目中。

編輯:微軟向我發送產品建議...

鏈接在這裏如果任何人有類似的問題:

Product Suggestions

我也把一個例子這裏如果您希望想嘗試一下它的第一手:

Sample

+0

喬納森,即使我調整標準的Win32窗口,我也有這種奇怪;)... ... – Anvaka 2009-12-16 06:46:27

+0

Anvaka必須在XP上,將你的主題改爲經典來看看我的意思。在Vista和更高版本中,所有窗口都能工作,因爲它們具有更高級的渲染功能我可以接受我的自定義窗口在XP上閃爍,但我的自定義窗口不得在Vista和更高版本上閃爍。 – jonathanpeppers 2009-12-22 20:12:44

回答

8

微軟報告發生這種情況,所有的WPF共贏DOWS。

標準樣式的工作原理是因爲窗口會渲染標題欄,窗口邊框等。調整標準邊框窗口的大小時,可以在任何機器上看到WPF客戶區閃爍。

如果將WindowStyle設置爲None,那麼WPF將呈現整個窗口,因此整個窗口閃爍後此閃爍變得更明顯。

現在,解決方法是讓您的窗口固定大小並調整客戶區域的大小。然而,這是非常性能密集型 - 所以你可能會更好地適應閃爍。

您可以按照上面的鏈接查看我的產品建議,看看Microsoft是否會解決這個問題。如果您有類似的問題,請投票支持。