2010-08-31 94 views
7

我有一個帶可擴展面板的WPF窗口(通過Expander)。面板位於窗口的左側,展開後窗口會長大以適應內容。WPF - 向左擴展窗口

默認情況下,窗口錨定在左上角,所以我的窗口向右增長。我希望窗戶向左增長。

我試圖做的Window.SizeChanged事件如下:

private void onWindowSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    Left -= (e.NewSize.Width - e.PreviousSize.Width) 
} 

和它的作品,但增長是乾的,我想找到一個平滑的解決方案。

+0

我正在玩你目前的解決方案,它也似乎有問題。如果你調整窗口的大小(即不使用擴展器),那麼調整大小真的很不穩定。在我的結尾,調整窗口大小的行爲也會打破窗口調整大小的代碼,並且不再向左擴展。 – Dave 2010-09-08 13:32:23

回答

4

我設法克服這種使用簡單的解決方案:隱藏&顯示。

下面的代碼:

protected override void OnRenderSizeChanged(SizeChangeInfo sizeInfo) 
{ 
    if (!sizeInfo.WidthChanged) 
    { 
     base.OnRenderSizeChanged(sizeInfo); 
     return; 
    } 
    Hide(); 
    base.OnRenderSizeChanged(sizeInfo); 
    Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width); 
    Show(); 
} 

我取代了事件處理程序Window.SizeChanged與此覆蓋的FrameworkElement.OnRenderSizeChanged

0

你可以把你的擴展器放在一個網格中(列的大小可以改變),然後將擴展器的ExpandDirection屬性設置爲left?

+0

我希望*窗口*向左增長。擴展器向左增長很好,但窗口大小適合右側的內容(所以一切都在移動)。 – 2010-09-03 05:23:12

1

解決方案1 ​​

嘗試使用Window屬性:SizeToContent =「寬度」,這將你的窗口擴展到內容的大小,你可以使用你的內容動畫和寬鬆,這將使縮放比例窗戶非常光滑。

解決方案2

您可以創建一個窗口,它是大於它的內容,讓你的背景是透明的。您仍然需要爲某個元素添加背景。

這裏是它如何可能看起來像一個例子: example image

+0

解決方案1仍然會導致窗口調整到左側,否?解決方案2很好,但我不能使用帶標題欄的常規窗口。我必須親自模仿。 – 2010-09-06 19:43:12

2

我沒有試圖讓一個窗口增長到左像你要求什麼,但如果一切都失敗了,我會考慮模板化按鈕看起來像擴展器按鈕。然後,而不是試圖讓您的窗口增長到左側,使用變換使一個新的窗口增長到主窗口的左側。

UPDATE

好,渲染性能不佳可能是相關的視頻卡,相關的佈局(過於複雜),或兩者兼而有之。我有一個想法可以爲你做詭計。 Jeff Prosise在Silverlight中發佈了一個放大鏡,它使用WriteableBitmap來達到預期的效果。我想,「爲什麼不使用WriteableBitmap在Expander的右邊創建佈局的屏幕截圖,並用它來掩蓋其他元素?」。我認爲如果你這樣做並隱藏底層元素(這樣他們就不會被調整),渲染性能將大大提高。

我得到了Jeff的代碼,在WPF中工作很少修改。

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/10/29/more-fun-with-silverlight-3-s-writeablebitmap.aspx

+0

我無法理解您的建議。你能否詳細說明一下? – 2010-09-07 08:56:27

+0

@Omer很好,*如果*我正確理解你的情況,你有一個向左打開的擴展器。但是當你這樣做時,窗口會調整到正確的位置,並且整個內容都會轉移,我認爲這會讓你看起來有點波濤洶涌。如果你保持整個窗口*完好無損*,它永遠不需要調整其子節點。您可以使用看起來像擴展器的按鈕來僞造這種效果,但是當您單擊它時,處理程序可以在主窗口的左側創建一個完全獨立的窗口,從而避免整個調整大小問題。你可以製作動畫。 – Dave 2010-09-07 12:36:02

+0

好吧,我明白了 - 但這是一種帶有副作用的黑客攻擊:最終結果看起來不像一個窗口(只有一個標題欄)。我正在尋找一個能給我一個窗口的解決方案。 – 2010-09-08 08:44:29