У меня есть WPF Datagrid с 3 столбцами как часть окна. Элемент ItemsSource устанавливается из массива объектов платежа (grdPayments.ItemsSource = payments). Когда фокус установлен на сетку в коде позади, я хочу, чтобы третья ячейка в первой строке получала фокус.Невозможно выбрать первую строку в WPF DataGrid
Независимо от того, какой из следующих методов я использую, вторая строка выбирается и фокусируется, а не 1-я.
Это устанавливает фокус на 3-й ячейки во 2-й строке:
grdPayments.Focus();
grdPayments.CurrentCell = new DataGridCellInfo(grdPayments.Items[0],grdPayments.Columns[2]);
grdPayments.SelectedCells.Add(dataGridCellInfo);
cell.Focus();
grdPayments.BeginEdit();
Это устанавливает фокус на 2-й ряд:
grdPayments.Focus();
grdPayments.SelectedIndex = 0;
grdPayments.BeginEdit();
Может кто-нибудь сказать мне, что происходит? DataGrid XAML приведен ниже. мой: NumberEntry это пользовательский элемент управления:
<DataGrid Name="grdPayments"
AutoGenerateColumns="False"
Background="#FF21B721"
ItemsSource="{Binding}"
SelectionUnit="Cell"
SelectionMode="Single"
Margin="5"
VirtualizingPanel.IsVirtualizing="False">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#FF21B721"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Width="240"
Binding="{Binding Path=Description}"
Header="Description"
IsReadOnly="True"
TextBlock.TextAlignment="Center">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{StaticResource clBr}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Width="100" Header="Due">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Width="100" Text="{Binding Path=Due, Converter={StaticResource CurrencyPadder}, ConverterParameter=10}" Background="{StaticResource clBr}" Focusable="False"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="100" Header="Paid">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{StaticResource clBr}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<my:NumberEntry Decimals="2"
LostFocus="NumberEditor_LostFocus"
PreviewKeyDown="NumberEditor_PreviewKeyDown"
MaxLength="10"
TextAlignment="Right"
Text="{Binding Path=Paid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
Чтобы быть ясным, я хочу выбрать одну ячейку в первой строке, но мне удастся выбрать только всю вторую строку или ячейку во второй строке. Я пробовал все решения, которые я смог найти в Интернете безрезультатно. Должен быть способ! –
ОК. С SelectionUnit = Fullrow и SelectionMode = Extended выбрана первая строка. Мне еще нужно сделать еще две вещи: 1) Выберите одну ячейку. 2) Поместите эту ячейку в режим редактирования программно. Досадно, что версия DataGrid WPF делает такую явно необходимую функцию настолько сложной. –