【发布时间】:2011-09-05 05:31:16
【问题描述】:
我在托管 WPF 用户控件的 Windows 窗体应用程序中遇到键盘焦点问题。当我按 Tab 时,如果 UserControl 中只有 WPF 控件,则导航效果很好。如果我将 WindowsFormsHost 托管控件添加到此 WPF UserControl,则焦点不会从 WPF UserControl 中的 WindowsFormsHosted 控件移开。
当应用程序是 WPF 应用程序时,焦点导航工作正常,但是当我将此 WPF UserControl 添加到 Windows 窗体应用程序时,按 TAB 不再起作用。
如果能在这方面得到一些帮助会很棒。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ElementHost host = new ElementHost();
host.Dock = DockStyle.Fill;
host.Child = new SomeControls();
this.Controls.Add(host);
}
}
/// <summary>
/// Interaction logic for SomeControls.xaml
/// </summary>
public partial class SomeControls : UserControl
{
public SomeControls()
{
InitializeComponent();
}
}
<UserControl x:Class="TabAndHostTest.SomeControls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:my="clr-namespace:TabAndHostTest" Width="450">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="124*" />
<ColumnDefinition Width="388*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="value1" Height="28" HorizontalAlignment="Left" Name="value1" VerticalAlignment="Top" />
<TextBox Grid.Row="0" Grid.Column="1" Height="23" HorizontalAlignment="Left" Name="textBox1" VerticalAlignment="Top" Width="257" />
<Label Grid.Row="1" Content="value2" Height="28" HorizontalAlignment="Left" Name="value2" VerticalAlignment="Top" />
<TextBox Grid.Row="1" Grid.Column="1" Height="23" HorizontalAlignment="Left" Name="textBox2" VerticalAlignment="Top" Width="257" />
<Label Grid.Row="2" Grid.Column="0" Content="hostedvalue1" Height="28" HorizontalAlignment="Left" Name="hostedvalue1" VerticalAlignment="Top" />
<WindowsFormsHost Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Left" Name="windowsFormsHost1" VerticalAlignment="Top" Width="307">
<forms:TextBox x:Name="formsTextbox1" Height="23" Width="150" />
</WindowsFormsHost>
<Label Grid.Row="3" Grid.Column="0" Content="hostedvalue2" Height="28" HorizontalAlignment="Left" Name="hostedvalue2" VerticalAlignment="Top" />
<WindowsFormsHost Grid.Column="1" Grid.Row="3" Height="23" HorizontalAlignment="Left" Name="windowsFormsHost2" VerticalAlignment="Top" Width="307">
<forms:TextBox x:Name="formsupdown1" Height="23" Width="150" />
</WindowsFormsHost>
</Grid>
【问题讨论】:
标签: wpf winforms wpf-controls windowsformshost elementhost