【问题标题】:How to automatically move focus when selectedindex tab change in Tab control?Tab控件中selectedindex选项卡更改时如何自动移动焦点?
【发布时间】:2015-01-23 07:09:35
【问题描述】:

我有这样的Tabcontrol

<TabControl SelectedIndex="{Binding SelectedTab}" Name="TabControlAll">
        <TabItem Header="Hal 1" Style="{StaticResource AzureTabItem}">
            <kor:Halaman1 DataContext="{Binding RTDetail}"/>
        </TabItem>
        <TabItem Header="Hal 2" Style="{StaticResource AzureTabItem}" >
            <kor:Halaman2 />
        </TabItem>
        <TabItem Header="Hal 3" Style="{StaticResource AzureTabItem}">
            <kor:Halaman3/>
        </TabItem>
        <TabItem Header="Hal 4" Style="{StaticResource AzureTabItem}">
            <kor:Halaman4/>
        ...

</TabControl>

视图可以是这样的。

在我的UserControl 中,我有很多控件,例如 Hal 12,里面有很多 Textboxes Usercontrol Halaman 所以我想问我如何自动将键盘焦点更改为将 Tabcontrol 索引更改为第一个 Textbox in选择标签?

当键盘焦点到达该页面中的最后一个控件时,我还必须移动到下一个TabControl

任何机构都可以提供帮助?

【问题讨论】:

  • 试试FocusManager.FocusElement={Binding ElementName=&lt;TextBoxName&gt;}
  • 我必须在每个用户控件中手动设置吗?
  • 如果您的 tabControl 中的控件彼此不同,那么可以。但是,如果您的控件正在使用某些基本控件,则只需将其设置在基本控件中即可。

标签: c# wpf


【解决方案1】:

当按下 Tab 键时,此事件处理程序会将焦点移至下一个 TabItem。

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if(e.Key == Key.Tab)
        tabControl.SelectedIndex = (tabControl.SelectedIndex + 1) % tabCount;
}

移动焦点后,您可以将此事件处理程序设置为选项卡项中的最后一个控件。这会将第一个控件聚焦在选定的 TabItem 中。您可以将 element 替换为您的第一个控件的名称。

private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    element.Dispatcher.BeginInvoke(new Action<UIElement>(x =>
    {
        x.Focus();
    }), DispatcherPriority.ApplicationIdle, element);
}

这应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多