我有以下德興控制:替代重新呈現
- 有依賴屬性
Text
; - 此文本設置爲內部
TextBlock
,然後控件自動調整大小(以適合)。 - 當這個屬性被改變時執行回調;
- 回調我需要兩個:當前控制外觀和更改文本後(動畫)。
我現在是這樣的:
// ... do something
textBlock.Text = Text;
ContentText.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, (Action)delegate() { });
// ... do something
不幸的是,該行(強制渲染)將拋出InvalidOperationException
同時調度處理被掛起不能執行此操作
我已經打開question關於這種情況(因此當我改變ContentControl
的內容時,我使用null
調用回調的原因)。
在我看來,解決方案也可以作爲重新呈現內容的替代方法。或者可能進行一些檢查以避免這種異常。
是否有任何其他方式來重新繪製(重新呈現)的內容或有沒有什麼辦法來檢查,當禁止使用調度(因爲它已被暫停)?
我只能想到添加計時器,以延遲執行,以便內容將被重新渲染。這將分成兩個邏輯:回調和定時器。而且看起來不太好看。
爲什麼不直接在TextBlock上調用'Measure'然後得到它的'DesiredSize'? – Clemens
您調用應該重新呈現控件的InvalidateVisual方法。你可以在這裏閱讀更多關於http://msdn.microsoft.com/en-us/library/system.windows.uielement.invalidatevisual(v=vs.110).aspx – Krishna
@Krishna,'InvalidateVisual'不起作用。也許它工作異步(在wpf中的許多事情)。如果有一個事件'OnRendered',那麼我可以使用它,但是這又會將我的邏輯分成2個peaces。仍然看起來比使用計時器好得多。 – Sinatr