重现我的案例(.net 4.0)
- 创建 WPF 应用程序 (MainWindow.xaml)
- 添加包含文本框的 Winform 用户控件 (UserConrol1.cs - Winform)
- 使用 windowsformshost 将 UserControl1 放入 MainWindow.xaml
- 将另一个包含文本框 (wpf) 的 WPF 窗口添加到项目 (Window1.xaml)
- 在 MainWindow InitializeComponent 之后创建并显示 Window1
您的项目已准备就绪,
- 运行项目并在 MainWindow.xaml 中设置文本框(在 WindowsFormsHost 中)
- 通过打开一个窗口(Windows 文件资源管理器、记事本、winamp 等)停用您的应用程序
- 尝试通过用鼠标单击文本框在 Window1 窗口中的文本框中写入
而且您会看到您无法在 Window1 中的文本框上设置焦点,因为 MainWindow Texbox(在 winformshost 中会窃取您对激活的应用程序的关注)
任何的想法?
主窗口.xaml
<Window x:Class="WinFormsHostFocusProblem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WinFormsHostFocusProblem"
xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
Title="MainWindow" Height="350" Width="525">
<Grid>
<my:WindowsFormsHost Focusable="False" >
<local:UserControl1>
</local:UserControl1>
</my:WindowsFormsHost>
</Grid>
</Window>
主窗口.xaml.cs
namespace WinFormsHostFocusProblem
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Window1 window1 = new Window1();
window1.Show();
}
}
}
Window1.xaml
<Window x:Class="WinFormsHostFocusProblem.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WinFormsHostFocusProblem"
xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize"
Topmost="True"
Title="Window1" Height="300" Width="300" Background="Red">
<Grid>
<TextBox Height="25">asd</TextBox>
</Grid>
</Window>
Window1.xaml.cs
namespace WinFormsHostFocusProblem
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
}