Wie setzen Sie den Fokus auf das WPF-DataGrid oder seine ersten Zeile?

Habe ich WPF DataGrid platziert auf der Window. Ich habe eine Schaltfläche, die führt die Geschäftslogik und füllt das raster aus.

Ich wollen, setzen Sie den Fokus auf die DataGrid (vorzugsweise die erste Zeile in der DataGrid -) wenn ich TAB von der-Taste. Ich habe den TabIndex aber irgendwie ist der Fokus nicht auf dem DataGrid.

Den entsprechenden Teil des Formulars XAML ist hier:

<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>

Wenn, fügte ich folgenden code auf der Schaltfläche LostFocus Ereignis, es markiert die erste Zeile. Aber wenn ich "down" - Taste zur Auswahl des nächsten Zeile im raster, anstatt zur nächsten Zeile, die es zuerst setzt den Fokus auf die Schaltfläche "Suchen" und das nächste mal geht in die zweite Reihe!!!

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;
        }
    }
}

Wie setzen Sie den Fokus auf die DataGrid - (oder legen Sie die erste Reihe)? Warum TabIndex funktioniert hier nicht?

Bitte gehen Sie durch Kommentare zu H. B. ' s Antwort. Das problem ist gelöst, nachdem H. B. darauf hingewiesen, dass TabIndex war nicht erforderlich. Bewegen DataGrid im StackPanel-Steuerelement das Button-Steuerelement das problem gelöst.

InformationsquelleAutor Learner | 2011-09-27

Schreibe einen Kommentar