2012-07-11 15 views
0

我開發了一個用於繪製圖表的WPF控件,但是在調整控件大小時存在性能問題。由於我不知道如何使性能更好,我現在只是在關閉渲染時關閉渲染,但這看起來不太好。所以我的問題是如果可以在調整大小期間將控件「凍結」爲圖像,以使其看起來平滑。WPF中重度UI控件的平滑調整行爲

編輯:控件基本上由一個包含自定義虛擬化面板的scrollviewer組成。滾動查看器只能滾動水平。在ScrollViewer中的虛擬面板包含所有其他項目,如曲線,標籤,網格等

+0

您如何調整控件大小? – blindmeis 2012-07-11 07:47:09

+0

我把它放在一個窗口中,調整窗口的大小。 – Godisemo 2012-07-11 08:06:30

+0

你試過[BitmapCache](http://msdn.microsoft.com/en-us/library/system.windows.media.bitmapcache(v = vs.100).aspx)嗎? – Clemens 2012-07-11 08:24:34

回答

0

下面是建議一個很好的列表:

Solve performance issue with WPF application

除了嘗試:

ScrollViewer上的IsDeferredScrollingEnabled =「true」。如果你有

UI虛擬化時,纔會啓用ScrollViewer.CanContentScroll =真

ListBox, VirtualizingStackPanel, and Smooth Scrolling in WPF

哈克解決方法,以允許基於像素的滾動和虛擬化技術有:

WPF ListBox with a ListBox - UI Virtualization and Scrolling

就一些細節問題UI虛擬化:

http://bea.stollnitz.com/blog/?p=338

0

這個答案顯然太晚了,但可能有助於未來的探險家!

如果您想在繁忙的控件上順利重新調整內容大小,則可能無法提供此答案。但是,如果您想在重新調整大小期間解決口吃問題,那麼在重新開始大小調整之前,請執行此操作。在圖像

    1. Capture current屏幕內容將Recangle覆蓋上面的圖像作爲背景。控制的
    2. 集可視性,隱藏/摺疊

    當重新大小完成。

    1. 設置控制的可見性,以可見
    2. 等待佈局已經改變(即,控制被佈置)
    3. 現在隱藏矩形覆蓋。

    這對控件來說效果不錯,但如果你調整窗口的大小,它仍會導致口吃。

  • +0

    當調整大小開始時,爲什麼不只是將沉重的UI控件的高度和寬度屬性設置爲固定值 - ActualHeight和ActualWidth,然後在調整大小完成時刪除高度和寬度? – Liero 2015-08-24 14:09:38

    +0

    @Liero ActualHeight和ActualWidth是隻讀屬性。問題在於對Measure()和Arrange()的調用由於控件中元素的數量而非常昂貴。這是造成糟糕的表現和口吃問題。我的建議是推遲重新安排控制,直到調整大小完成 – 2015-08-26 13:21:34

    +0

    是的,ActualHeight是隻讀的,這就是爲什麼我建議只閱讀它;)'延遲重新安排控制權 - 這就是說我的建議。如果在調整大小時明確將大小設置爲固定值,則在調整窗口大小時不會調用measure和arrage。當你刪除顯式大小時,孩子將被重新排列。 – Liero 2015-08-26 13:30:06