我查看了几个问题(stackoverflow.com内外),找不到回答我问题的问题。如果你知道一个,请告诉我。
场景是这样的:当控件位于未选中的TabItem中时,我想设置一个控件以获得键盘焦点。
示例XAML:
<Window x:Class="WPF_Application1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
>
<Grid>
<TabControl>
<TabItem Name="tab1" Header="tab1">
<Button Name="button" Content="set focus" Height="24" Width="57" Click="button_Click" />
</TabItem>
<TabItem Name="tab2" Header="tab2">
<TextBox Name="text" Height="23" Width="331" />
</TabItem>
</TabControl>
</Grid>
</Window>
示例XAML代码隐藏:
namespace WPF_Application1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
Keyboard.Focus(text); // doesn't work
text.Focus(); // doesn't work
}
}
}
有什么建议吗?
答案 0 :(得分:1)
我找到了解决方案here。看起来必须选择TabItem,必须调用Window.UpdateLayout()方法,然后在控件上设置焦点。我们可能只是创建一个扩展方法来处理幕后的UIElements,因为这种行为是我们希望普通Focus工作的方式......