强制WPF控件刷新? [英] Force a WPF control to refresh?
本文介绍了强制WPF控件刷新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们有两个像这样的textBlocks :(我们使用.NET FW 3.0)
We have two textBlocks like this: (we used .NET FW 3.0)
<TextBlock Grid.Column="0" Name="tabName" Style="{StaticResource textBlockBarStyle}" HorizontalAlignment="Left">
<TextBlock.Margin>
<Binding Converter="{StaticResource dpiConverter}">
<Binding.ConverterParameter>
<Thickness Left="3" Top="6" Right="0" Bottom="0"/>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Margin>
</TextBlock>
和
<TextBox x:Name="txtBoxHelp"
IsReadOnly="True" Style="{DynamicResource txtBoxHelpStyle}"
IsTabStop="False"
Text="some text" MouseLeftButtonDown="txtBoxHelp_MouseLeftButtonDown">
<TextBox.Margin>
<Binding Converter="{StaticResource dpiConverter}">
<Binding.ConverterParameter>
<Thickness Left="7" Top="0" Right="0" Bottom="0"/>
</Binding.ConverterParameter>
</Binding>
</TextBox.Margin>
</TextBox>
这两个textBlocks在其他OS-es上运行良好,但有时在Windows XP Home Edition上缺少SP3。我们尝试了许多方法来刷新它们,但失败了。
These two textBlocks work well on other OS-es, but sometimes miss on the Windows XP Home Version with SP3. We have tried many ways to refresh these, but failed.
我们尝试了:
- UpdateLayout
- InvalidateVisual
- 将代码中的Set Text属性更改为绑定模式。
如何强制刷新这些控件?
How to force these controls to refresh?
推荐答案
Thread thread = new Thread(new ThreadStart(delegate()
{
Thread.Sleep(200); // this is important ...
try
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Send,
new NoArgsHandle(delegate()
{
// do something, set .Text = "some text"
}));
}
catch { }
}));
thread.Name = "thread-UpdateText";
thread.Start();
效果很好。
这篇关于强制WPF控件刷新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文