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?
InformationsquelleAutor Learner | 2011-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht einmal einen tab-index, wenn es keine fokussierbaren Steuerelemente zwischen den
Button
undDataGrid
in der control-Hierarchie. Sie haben schon einige Handler und alles scheint ein wenig verworren für mich. Ich kann vor Ort etwas in diesem code (vielleicht kann jemand anders natürlich), mein Vorschlag wäre, dass Sie versuchen, um Ihren code zu vereinfachen, bis es funktioniert wieder wie es soll standardmäßig. z.B. dieser code ist berühren sollte funktionieren:Auch, warum die großen tab-index delta? Wenn Sie auf 1301 & 1302 könnte es nicht einen beliebigen Wert zwischen also sollte es automatisch sicherer code.
Gut, sollte es keine Notwendigkeit, die handler trotzdem.
Es gibt keine Kontrolle zwischen Taste und DataGrid. Aber die Schaltfläche ist Teil des StackPanel-und DataGrid-Steuerelement aus dem StackPanel. Übrigens, ich entfernte alle Tab-Indizes, wie Sie erwähnt. Tab funktioniert einwandfrei, aber es immer überspringt das DataGrid-Steuerelement und Fokus auf die nächste Steuerung (nächste an die DataGrid -) aus der Schaltfläche.
Das StackPanel ist egal wie es ist kein input-element. (Sie können wickeln Sie die Taste in meinem Beispiel-code in einem, es wird immer noch funktionieren.) Versuchen Sie einfach, vereinfachen Sie weiter Ihre code, um festzunageln die Quelle des Problems.
Vielen Dank für Ihre Zeit und Antworten. Es hat mir geholfen. Ich entfernte Registerkarte Indizes und zog
DataGrid
innerhalb derStackPanel
und es ist mein problem gelöst! Navigation mit der Tabulatortaste innerhalb derDataGrid
bewegt sich die Kontrolle von einer Zelle zur anderen, das will ich jetzt aufhören, aber es ist nicht Teil dieser Frage.InformationsquelleAutor H.B.
Fügen Sie folgenden code im datagrid von xaml
fügen Sie folgenden code in .cs-Datei
InformationsquelleAutor Sagar