WPF DataGrid, focus az első sorra

WPF DataGrid, focus az első sorra
2016-09-30T11:42:57+02:00
2016-10-14T14:06:41+02:00
2022-10-15T23:01:27+02:00
a_balazs
Sziasztok!
El szeretném érni, hogy a DataGrid első sora kapja meg a billentyűzet fókuszt, miután a lista feltöltésre került.
A Datagridg egy CollectionViewSource-hoz van kötve, a kódból feltöltöm a CollectionViewSource-ot, és ha van eredmény (Count()>0), akkor történjen meg a fókusz átadása.

xaml:
Snippet <DataGrid Grid.Row="1" Name="resultsDataGrid" IsReadOnly="True" AutoGenerateColumns="False" SelectionUnit="FullRow" ItemsSource="{Binding Source={StaticResource resultsCollectionViewSource}}" AlternatingRowBackground="LightGray" GridLinesVisibility="None"> <DataGrid.Resources> <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <Trigger Property="DataGridCell.IsSelected" Value="True"> <Setter Property="Background" Value="#FFDACC"/> <Setter Property="Foreground" Value="{x:Static SystemColors.ControlTextBrush}"/> </Trigger> </Style.Triggers> </Style> </DataGrid.Resources> ... </DataGrid>
Próbáltam pár dolgot:
 -ItemContainerGenerator.ContainerFromIndex(rowIndex) null-al tér vissza
- próbáltam emulálni  billentyűleütést, mivel, ha azt teszem, hogy dataGrid.Focus() ;s dataGrid.SelectedItem=dataGrid.Items[0], akkor már csak egy jobbra nyíl lenyomása kell, és ott a fókusz az elsó soron, de ez sem jött össze.

Minden javaslatra kíváncsi vagyok.
B
Mutasd a teljes hozzászólást!
Akkor ismét az utókornak

DataGrid, kötve CollectionViewSource-hoz, a CollectionViewSource linq select... new Rekordtípus, majd:

... resultsDataGrid.UpdateLayout(); IEnumerable<RekordTipus> list = resultsCollectionViewSource.Source as IEnumerable<RekordTipus> if(list.Count()>0) { // vannak sorok

 resultsDataGrid.ScrollIntoView(list.ElementAt(0));
 DataGridRow dgr=resultsDataGrid.ItemContainerGenerator.ContainerFromIndex(0);
 //itt azert nem artana egy null vizsgalat a dgr-re
 DataGridCellsPresenter cells = (DataGridCellsPresenter) GetVisualChild<DataGridCellsPresenter>(dgr);
 // felteve, hogy van 0 indexu column, marpedig miert ne lenne
 DataGridCell cell = (DataGridCell)cells.ItemContainerGenerator.ContainerFromIndex(0);
 // itt sem artana egy null vizsgalat a cell-re
 cell.Focus();
}

...

static T GetVisualChild<T>(Visual parent) where T:Visual
{
 T child = default(T);
 int visuals=VisualTreeHelper.GetChildrenCount(parent);
 for(int k=0; k<visuals; k++)
 {
  Visual visual_item=(Visual)VisualTreeHelper.GetChild(parent,i);
  child = visual_item as T;
  if(child==null)
  {
   child=GetVisualChild<T>(visual_item);
  }
  if(child != null)
  {
   break;
  }
 }
 return child;
}
\o/
B
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd