我有以下德兴控制:替代重新呈现
- 有依赖属性
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