моя цель - реализовать datagrid с столбцами combobox, где пользователь может выбрать один щелчок мышью. У меня есть проблемы с этим вопросом, и я нашел довольно много решений (here, или here), который отлично работает, UNTIL пользователь расширяет combobox в столбце один, а затем выбирает combobox в столбце 2. Проблема в том, что при первом щелчке первый combobox просто теряет фокус и только после второго щелчка мыши добавляется другое поле со списком. Но это нужно сделать одним щелчком мыши.Как открыть comboBoxColumn с одним щелчком мыши
В принципе, XAML выглядит следующим образом:
<DataGrid Name="grid" SelectionMode="Extended" HeadersVisibility="Column" SelectionUnit="Cell" >
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Name" Width="*" SelectedItemBinding="{Binding Path=Entity}" DisplayMemberPath="EntityName" >
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=Entities}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=Entities, Mode=TwoWay}"/>
<Setter Property="Uid" Value="cbEntMapping"/>
<EventSetter Event="SelectionChanged" Handler="CbFirmChanged" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown" />
</Style>
</DataGridComboBoxColumn.CellStyle>
</DataGridComboBoxColumn>
<DataGridComboBoxColumn Header="Give Up"
Width="*"
SelectedItemBinding="{Binding Path=GiveUp}"
DisplayMemberPath="EntityName">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=GiveUp}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=GiveUp, Mode=TwoWay}"/>
<EventSetter Event="SelectionChanged" Handler="CbFirmChanged" />
<Setter Property="Uid" Value="cbEntMapping"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown" />
</Style>
</DataGridComboBoxColumn.CellStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
и вот текущая реализация одного режима нажмите редактирования:
private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var cell = sender as DataGridCell;
GridColumnFastEdit(cell, e);
}
private void GridColumnFastEdit(DataGridCell cell, RoutedEventArgs e)
{
if (cell == null || cell.IsEditing || cell.IsReadOnly)
return;
var dataGrid = grid;
if (dataGrid == null)
return;
if (!cell.IsFocused)
{
cell.Focus();
}
var cb = cell.Content as ComboBox;
if (cb == null) return;
grid.BeginEdit(e);
cell.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { }));
cb.IsDropDownOpen = true;
}
попытался с помощью TemplateColumn с шаблоном редактирования как выпадающий список и установить в режиме редактирования по щелчку? – Muds
Спасибо за ответ, Я попробовал ваше предложение, но мне еще нужно нажать второй раз, если текущее поле со списком будет расширено. – user3046346
для этого ---- это должно работать .... private void UIElement_OnPreviewMouseLeftButtonUp (object sender, MouseButtonEventArgs e) { combo.IsDropDownOpen =! Combo.IsDropDownOpen; } – Muds