这是我从DataGrid工作开始以来必须处理的一个令人讨厌的错误,我无法找到解决方案而无法拆除其他内容。
我的DataGrid中有一个DataGridTemplateColumn,它包含一个ComboBox,以及之前和之后的一些其他单元格(只是一些文本)。当用户离开最后一个单元格的编辑时,它会通过按Tab键来完成,以便将焦点移动到下一个单元格,即DataGridTemplateColumn。我遇到的问题是它首先将单元格聚焦,然后再次按Tab键将内部的ComboBox聚焦。
所以我使用了datagrid_previousKeyDown(etc ...)事件来编写类似的东西:
GridContentMethods.GetCell(this.gridCameras, GridContentMethods.GetRow(
this.gridCameras, this.gridCameras.SelectedIndex), 5).IsTabStop = false;
GridContentMethods.GetCell(this.gridCameras, GridContentMethods.GetRow(
this.gridCameras, this.gridCameras.SelectedIndex), 5).Focusable = false;
如果我这样做,网格会失去焦点,但前提是我正在编辑前一个单元格。如果我只浏览我的列,它就能完美运行。
然后,我正在this post上测试代码。如果我编辑前一个单元格,焦点在ComboBox上,但我不能像以前一样用箭头更改值,最重要的是,我不会在离开单元格时立即显示值。如果我没有编辑上一个单元格,我必须按Tab键两次才能对焦。
我还发现我的ComboBox不再显示了,但我只在CellEditingTemplate上方的CellTemplate中添加了一个空的(然后是相同的)ComboBox。它在这里,但它没有更好的工作。这是我上面第一次测试的Xaml代码:
<DataGridTemplateColumn Header="FPS" Width="80" x:Name="Fps">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="cbFps"
Foreground="Black"
HorizontalContentAlignment="Left"
DropDownClosed="ComboBox_DropDownClosed"
DropDownOpened="cbFps_DropDownOpened"
Initialized="cbFps_Initialized"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
有时我会找到一个解决方案,但只是看到它没有保留以前的工作功能,这让我发疯了。
我希望它如何运作:
如果用户使用Tab键移动焦点,从文本单元格移动到DataGridTemplateColumn,焦点必须位于ComboBox内部,无论他是否正在编辑前一个单元格。另外,我希望ComboBox保留所选的值,最终用箭头选择,就像之前一样(我不应该再添加任何代码)。
感谢您的帮助!我想我会在那之后完成DataGrid控件。