【发布时间】:2014-07-14 20:33:30
【问题描述】:
我有一个 DataGrid,当用户点击向下箭头时,它需要移动到下面的下一行,但关注一个包含文本框的单元格。我不想关注文本框而不是实际的单元格。这就是我的 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 页面。 它将光标添加到每一行文本框,但不关注文本框。 设置
FocusManager.FocusedElement属性会将逻辑焦点设置为在其焦点内的元素范围...所以他们是专注的,但只是在他们的专注范围内。请阅读链接页面,了解如何管理您的专注要求。 -
请看上面的编辑