0
我有一个DataGrid,当用户点击向下箭头时,它需要移动到下面的下一行,但重点放在有文本框的单元格中。我不想关注文本框不是实际的单元格。这就是我的DataGrid的外观。WPF DataGrid将行选择更改为单元格的文本框
<DataGrid Name="myDataGrid" PreviewKeyDown="myDataGrid_PreviewKeyDown">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Description" IsReadOnly="True" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Right" Text="{Binding Path=Descrip, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged, StringFormat=C, ConverterCulture=en-us}" TextAlignment="Right"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Units Counted" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox BorderBrush="Black" BorderThickness="2" FontWeight="Bold" Margin="2" Text="{Binding Path=UnitCounted, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Right" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
private void myDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
{
e.Handled = true;
int indx = myDataGrid.SelectedIndex + 1;
myDataGrid.SelectedIndex = indx;
myDataGrid.CurrentCell = new DataGridCellInfo(myDataGrid.Items[indx], myDataGrid.Columns[1])
}
}
这样做选择该小区不是文本框。如果我将它添加到文本框;
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
它为每行文本框添加一个光标,但不关注文本框。
谢谢
编辑:谢谢@Sheridan我更接近这个代码;
<TextBox
BorderBrush="Black"
BorderThickness="2"
FontWeight="Bold"
Margin="2"
Text="{Binding Path=UnitCounted, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"
TextAlignment="Right"
FocusManager.IsFocusScope="True"
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>
然后在我的myDataGrid_PreviewKeyDown
将在myDataGrid.BeginEdit()
允许为它工作。问题是,似乎BeginEdit从来没有真正结束。我该如何解决?
我建议您阅读MSDN上的[Focus Overview](http://msdn.microsoft.com/en-us/library/aa969768(v = vs.110).aspx)页面。 *它将光标添加到每一行文本框,但不会将焦点放在文本框上*设置“FocusManager.FocusedElement”属性将*逻辑焦点*设置为其焦点范围内的一个元素* ......所以它们*专注,但只是*在他们的焦点范围内*。请阅读链接页面,了解如何管理您的重点需求。 – Sheridan
请参阅上面的修改 – Xaphann