我在DataTemplate中有一个DataGrid
和一个ComboBox
<DataGridTemplateColumn Header="Stock Name" Width="290">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding StockName}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Width="290" Name="cmbStock" ItemsSource="{Binding Path=Stocks}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" ></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
当我使用Tab访问此DataGridCell时,我希望ComboBox能够DropDownOpen 这包括在我到达时使DataGrid单元格处于编辑模式。
我正在使用WPF MVVM
答案 0 :(得分:2)
我认为您需要做的是强制数据网格进入“单击或制表符”编辑模式。基本上当细胞聚焦时,强制网格将CellTemplate切换到CellEditingTemplate。代码是:
BeginEdit(); //dataGrid.BeginEdit()
现在你如何以及在哪里取决于你想要做多少工作。您可以扩展DataGrid类并引入DependencyProperty“SingleClickEdit”或您想要的任何内容。然后,当监视/预览键向下和在选项卡上选择单元格并强制它处于编辑模式。或者如果您只需要该列,则可以监控:
<TextBlock Text="{Binding StockName}"
GotFocus="OnGotFocus"
PreviewKeyDown="OnPreviewKeyDown"
....., or something like that
然后在.cs代码中,例如在OnGotFocus()中调用datagrid.BeginEdit()。
编辑:(根据评论/对话)
将IsDropDownOpen = true添加到您的组合框
<DataGrid x:Name="dataGrid"
SelectionChanged="dataGrid_SelectionChanged"
....>
<ComboBox Width="290" Name="cmbStock" ItemsSource="{Binding Path=Stocks}"
...
IsDropDownOpen="True"></ComboBox>
</DataTemplate>
在.cs
中private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
dataGrid.BeginEdit();
}
应该这样做,在我的测试中工作:),基本上你在选择时强制数据网格进入编辑模式,在编辑模式下,你得到了已经打开的组合框