我遇到了空域问题。我的WPF应用程序托管了一个winform组件。我想在组件加载和长活动期间显示一个带有“等待”文本的弹出窗口。在这里我遇到了问题:弹出窗口正确显示但是当我处理组件的忙碌事件时,我无法更新弹出内容。这里有一些代码XAML:
<WindowsFormsHost Name="wfh" Grid.Row="1" Grid.Column="0" ></WindowsFormsHost>
<Popup x:Name="Overlay" AllowsTransparency="True" Placement="Center"
StaysOpen="True"
IsOpen="True"
PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Grid, AncestorLevel=1}}">
<TextBlock Name="tbWait" Foreground="Red" />
</Popup>
和c#:
myWinformComponent.Event => (s, e) =>
{
tbWait.Text = e.IsBusy ? "Loading..." : string.Empty;
}
我知道WinForm和WPF的空域问题是什么,但我认为保持弹出窗口始终打开让我显示windowformshost的任何内容。
编辑:我在后面的代码中放置了一些断点,我看到Text属性正确更改。此更改不会显示在UI中。
您有解决方法或解决方案吗? 谢谢你们!
答案 0 :(得分:0)
根据@HansPassant的评论,我可以用这些行强制重绘:
DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
frame.Continue = false;
return null;
}), null);
Dispatcher.PushFrame(frame);
也许这不是最优雅的解决方案,但它是我问题的一个有效补丁。
答案 1 :(得分:-1)
不幸的是,您无法在WindowsFormsHost上显示任何WPF内容。我花了很长时间自己打这个怪癖,直到我最终放弃并重新启动UI,使覆盖不必超过WinForms组件。