私のケースを再現するには(.net 4.0)
- WPF アプリケーション (MainWindow.xaml) を作成する
- テキスト ボックス (UserConrol1.cs - Winform) を含む Winform ユーザー コントロールを追加します。
- Windowsformshost を使用して UserControl1 を MainWindow.xaml に配置します。
- テキストボックス (wpf) を含む別の WPF ウィンドウをプロジェクト (Window1.xaml) に追加します。
- MainWindow InitializeComponent の後に Window1 を作成して表示する
プロジェクトの準備が整いました。
- Project を実行し、MainWindow.xaml (WindowsFormsHost にあるもの) にフォーカスされたテキスト ボックスを設定します。
- ウィンドウを開いてアプリケーションを非アクティブ化します (Windows ファイル エクスプローラー、メモ帳、winamp など)。
- マウスでテキストボックスをクリックして、Window1ウィンドウのテキストボックスに書き込んでみてください
また、Window1 のテキストボックスにフォーカスを設定できないことがわかります。これは、MainWindow Texbox (winformshost では、アプリケーションがアクティブになったときにフォーカスが奪われるためです)
何か案が?
MainWindow.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>
MainWindow.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();
}
}
}