Comment définir le focus sur le WPF DataGrid ou sa première ligne?

J'ai WPF DataGrid placé sur le Window. J'ai un bouton qui exécute une logique métier et remplit la grille.

Je veux mettre l'accent sur la DataGrid (de préférence en première ligne dans la grille de données) lorsque je TAB à partir du bouton. J'ai mis le TabIndex mais de toute façon, l'accent n'est pas venu sur le contrôle DataGrid.

La partie pertinente de la forme du XAML est ici:

<StackPanel Orientation="Vertical" Grid.Column="2" Margin="20,10,10,10">
    <Button Content="Search"
                Height="25" HorizontalAlignment="Right" Margin="0,-25,0,0"
                Name="btnSearch" VerticalAlignment="Top" Width="75" **TabIndex="1300"** Click="btnSearch_Click" Keyboard.KeyDown="btnSearch_PreviewKeyDown" LostFocus="btnSearch_LostFocus"/>
</StackPanel>
<DataGrid AutoGenerateColumns="False" Grid.Column="1" Margin="20,160,10,10" Name="dataGridOrganisations" **TabIndex="1400"**
          BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Focusable="True"
                ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" GridLinesVisibility="None"
           ItemsSource="{Binding}" CanUserReorderColumns="False" CanUserResizeRows="False" IsReadOnly="True" SelectionChanged="dataGridOrganisations_SelectionChanged" Keyboard.PreviewKeyDown="dataGridOrganisations_PreviewKeyDown"  >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Shortname" Width="100" Binding="{Binding ShortName}" />
        <DataGridTextColumn Header="Internal Code" Width="100" Binding="{Binding LocalID}"/>
        <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/>
    </DataGrid.Columns>
</DataGrid>

Quand j'ai ajouté le code suivant sur le Bouton de LostFocus cas, il met en évidence la première ligne. Mais quand j'utilise vers le bas touche de direction pour sélectionner la ligne suivante dans la grille; au lieu d'aller à la ligne suivante, il définit d'abord l'accent sur le bouton "Rechercher" et la prochaine fois, va à la deuxième ligne!

if (this.dataGridOrganisations != null && this.dataGridOrganisations.HasItems)
{
    this.dataGridOrganisations.Focus();
    if (dataGridOrganisations.Items != null && dataGridOrganisations.Items.Count > 0)
    {
        DataGridRow firstRow = this.dataGridOrganisations.ItemContainerGenerator.ContainerFromItem(dataGridOrganisations.Items[0]) as DataGridRow;
        if (firstRow != null)
        {
            firstRow.IsSelected = true;
        }
    }
}

Comment définir le focus sur le contrôle DataGrid (ou sa première ligne)? Pourquoi TabIndex ne fonctionne pas ici?

  • S'il vous plaît aller à travers des commentaires sur le H. B. réponse. Le problème est résolu, d'après H. B. a souligné que TabIndex n'était pas nécessaire. Le déplacement de grille de données à l'intérieur de la StackPanel du contrôle de Bouton résolu le problème.
InformationsquelleAutor Learner | 2011-09-27