我控制了以下设计:
Text
; TextBlock
,然后控件自动调整大小(以适应)。我现在拥有的是:
// ... do something
textBlock.Text = Text;
ContentText.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, (Action)delegate() { });
// ... do something
不幸的是,所述行(强制渲染)将抛出InvalidOperationException
暂停调度程序处理时无法执行此操作
我已针对该案例打开question(由于某些原因,在使用我的内部控件更改null
内容时,使用ContentControl
调用回调。)
在我看来,解决方案也可以是重新呈现内容的替代方式。或者也许是一些检查来避免这种异常。
是否有其他方法可以重新绘制(重新呈现)内容,或者是否有任何方法可以检查,当禁止使用调度程序时(因为它被暂停)?
我只能考虑添加计时器,以延迟执行,以便重新呈现内容。这将在两个和平中分裂逻辑:在回调和计时器中。并不是真的很好看。
答案 0 :(得分:0)
感谢@Clemens,使用Measure
的想法似乎是一个非常好的工作解决方案。此外,这个原则允许克服许多其他问题(自我第一次触摸wpf
以来从未消失),我已经少了2个......
简而言之:
Measure()
调用RenderSize
; DesiredSize
代替RenderSize
(ActualWidth
/ ActualHeight
)。像魅力一样工作。 最好的部分是在父控件上调用它,这将重新计算所有内容,考虑到其子项(就像在我的情况下,我称为控制测量和测量更新必须单独为孩子们打电话!TextBlock.Text
)。