1

我在用户控件中有以下代码。

 <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中托管相同的用户控件并在此上下文中打开SaveFileDialog时, Popup 不会获得焦点

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

有什么建议/想法/黑客可以将注意力集中在弹出窗口上吗?或者是否有可能在 Winforms 中实现这一点?

4

1 回答 1

1

我想它没有获得焦点,因为ShowDialog它是阻塞的,因此您的窗口在显示对话框时无法接收任何事件。

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

var dialog = new SaveFileDialog();
var thread = new Thread(() => dialog.ShowDialog());
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
于 2015-07-27T05:23:58.173 回答