在TabItem中未选中的子控件上设置键盘焦点

时间:2011-10-12 16:36:36

标签: wpf

我查看了几个问题(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
        }

    }
}

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案here。看起来必须选择TabItem,必须调用Window.UpdateLayout()方法,然后在控件上设置焦点。我们可能只是创建一个扩展方法来处理幕后的UIElements,因为这种行为是我们希望普通Focus工作的方式......