C# 如何通过单击打开comboBoxColumn
我的目标是实现一个带有组合框列的datagrid,用户可以在其中单击鼠标进行选择。 我在谷歌上搜索了这个问题,找到了很多解决方案,或者说效果很好,直到用户在第一列中展开combobox,然后在第二列中选择combobox。问题是,第一次单击时,第一个组合框会失去焦点,只有在第二次单击后,其他组合框才会展开。但是,它需要在一次点击中完成 基本上,XAML看起来像:C# 如何通过单击打开comboBoxColumn,c#,.net,wpf,datagrid,combobox,C#,.net,Wpf,Datagrid,Combobox,我的目标是实现一个带有组合框列的datagrid,用户可以在其中单击鼠标进行选择。 我在谷歌上搜索了这个问题,找到了很多解决方案,或者说效果很好,直到用户在第一列中展开combobox,然后在第二列中选择combobox。问题是,第一次单击时,第一个组合框会失去焦点,只有在第二次单击后,其他组合框才会展开。但是,它需要在一次点击中完成 基本上,XAML看起来像: <DataGrid Name="grid" SelectionMode="Extended" HeadersVisibilit
<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>
从评论中删除-
您是否尝试过将templatecolumn与edit template一起用作组合框,并在单击时设置为编辑模式 在此之后,要在单击中打开组合,请执行以下操作
private void UIElement_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
combo.IsDropDownOpen = !combo.IsDropDownOpen;
}
尝试使用templatecolumn,将编辑模板作为组合框,并在单击时设置为编辑模式?感谢您的回复,我尝试了您的建议,但如果当前组合框已展开,我仍必须再次单击。为此,这应该可以工作。。。。private void UIElement_on PreviewMouseLeftButtonUpoObject发送方,MouseButtonEventArgs e{combo.IsDropDownOpen=!combo.IsDropDownOpen;}添加了格式化答案..部分有效。它甚至可以打开以前扩展的组合。问题是,当鼠标按下时,它会自动折叠组合框,这不是一种常见的行为?对我来说,它关闭了以前的组合,并在一次点击中打开了新的组合,这对你来说不一样吗?在鼠标按钮向上时,它不应该关闭组合。用户应该能够在UI的任何位置释放按钮,并且组合框仍然可以展开。但这并不是在每个鼠标按钮上都发生的,它只是关闭组合框。那么它应该什么时候关闭?它应该像普通组合框一样工作,所以在选择或单击外部某处后关闭。在这种情况下,它应该保留旧值。
private void UIElement_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
combo.IsDropDownOpen = !combo.IsDropDownOpen;
}