将键盘焦点更改为特定控件

时间:2017-07-19 18:55:44

标签: wpf focus tabnavigator

我有一个usercontrol,它有几个不同逻辑级别的元素。默认情况下,键盘焦点转到最高级别的逻辑控制,但我想集中切换到逻辑树内部的其他控件(但加载此用户控件时会加载所有控件)。

XAML如下所示,当OverlayContent(对话框)消失时,我希望焦点移动到“EigthLevelTB”一个TextBox,但默认情况下控件转到“ThridLevelGB”。用户可以选择并导航到“EigthLevelTB”,但他们希望默认焦点在这里而不是标签。

我已尝试在UserControl.Loaded,FocuableChanged事件等中设置焦点此EigthLevelTB。此外,我尝试设置KeyboardNavigation.TabIndex =“0”,但没有任何对我有用。

请说明这里可能出现的问题?

<Grid Name="OverlayGrid">
    <Grid Name="TopMostGrid" Grid.Row="1" Margin="1,0,1,0" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <Grid  Name="FirstLevelGrid" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <ContentControl Grid.Row="0" Margin="5,10,5,10" Content="{Binding HeaderInfo}" KeyboardNavigation.TabNavigation="None" Focusable="False"/>

            <Grid Name="SecondLevelGrid" Grid.Row="1" Margin="1,0,0,0">
                <Border Name="ThridLevelBorder" Margin="5,2.5,5,2.5">
                    <Border Name="FourthLevelBorder">
                        <Grid Name="FifthLevelGrid">
                            <Grid Name="SixthLevelGrid" Grid.Column="0" Visibility="{Binding GridVisibility, FallbackValue=Visible}">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>

                                <Grid Name="SeventhLevelGrid" Grid.Row="0" HorizontalAlignment="Center"  Margin="2,15,2,2">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
                                        <ColumnDefinition Width="*" SharedSizeGroup="B"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" HorizontalAlignment="Left" Text="Enter:"/>

                                    <TextBox Name="EigthLevelTB" Grid.Column="1"
                                             Text="{Binding UserData, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}" 
                                             KeyboardNavigation.TabIndex="0">
                                    </TextBox>
                                </Grid>
                            </Grid>
                        </Grid>
                    </Border>
                </Border>
            </Grid>

        </Grid>

        <ScrollViewer Name="FirstLevelScrollViewer" Grid.Column="1" CanContentScroll="True" VerticalScrollBarVisibility="Auto">
            <DockPanel Name="SecondLevelPanel" LastChildFill="False">
                <GroupBox DockPanel.Dock="Top">
                    <ContentControl Content="{Binding Legend}" Margin="5" IsTabStop="False" KeyboardNavigation.TabNavigation="None" Focusable="False"/>
                </GroupBox>
                <GroupBox Name="ThridLevelGB" DockPanel.Dock="Top" Content="{Binding ButtonList}" 
                          Focusable="False" KeyboardNavigation.TabNavigation="Continue"
                      VerticalAlignment="Top" VerticalContentAlignment="Stretch" >
                </GroupBox>
            </DockPanel>
        </ScrollViewer>
    </Grid>

    <ContentControl Name="OverlayContent" Content="{Binding OverlayContent}"/>
</Grid>

谢谢,

RDV

0 个答案:

没有答案