打开SaveFileDialog时,使用ElementHost托管在Winforms中的WPF Popup将被冻结

时间:2015-07-27 05:10:21

标签: wpf winforms popup elementhost

我在usercontrol中有以下代码。

 <Grid>
        <Popup x:Name="MyPopup" IsOpen="true" AllowsTransparency="True" HorizontalOffset="0" VerticalOffset="500">
            <Border VerticalAlignment="Top" Height="500" Width="440">
                <Keyboard:Keyboard x:Name="Keyboard"/>
            </Border>
        </Popup>
 </Grid>

Popup上的自定义键盘在WPF应用程序中正常工作。

但是当使用 ElementHost winforms 中托管相同的usercontrol并在此上下文中打开 SaveFileDialog 时, Popup不会#39; t得到关注

现在我在Popup上有一个键盘,在这种情况下它有点过时了。

任何关于Popup的建议/想法/黑客攻击? 或者是否有可能在Winforms中实现这一目标?

1 个答案:

答案 0 :(得分:1)

我认为它没有得到关注,因为ShowDialog正在阻止,因此在显示对话框时,您的窗口无法接收任何事件。

可能的解决方法是从另一个STA线程显示对话框。

var dialog = new SaveFileDialog();
var thread = new Thread(() => dialog.ShowDialog());
thread.SetApartmentState(ApartmentState.STA);
thread.Start();