因此,我在datagrid内的WPF ComboBox内有几个列表(带有ComboBox的DataGridComboBoxColumn和DataGridTemplateColumn)。
但是,当我为ComboBox更改选定的项目时,将鼠标悬停在列表上,然后滚动,选定的项目就会更改。
因为我在DataGrid(可以有一个滚动条,并且有一些列表包含4000多个项目)内部,所以我想避免这种情况可能会发生在最终用户身上,但是我似乎找不到如何禁用此滚动功能。
我搜索了互联网的各个角落,但似乎无法为该问题找到合适的解决方案。
这是ComboBox之一的源代码:
<!-- Processed status -->
<DataGridComboBoxColumn Header="Parsed Status"
SelectedItemBinding="{Binding Status}"
Width="auto">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource"
Value="{Binding StatusList}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource"
Value="{Binding StatusList}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
现在这是问题的解决方法。整个应用程序都是用MVVM编写的,因此该修补程序应完全实现而无需任何代码隐藏。 :)
感谢您的关注。
亲切的问候。
最佳答案
尝试使用模板列而不是DataGridComboboxColumn,如下所示:
<DataGridTemplateColumn Header="Parsed Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding StatusList}" DisplayMemberPath="DisplayProperty"
SelectedValuePath="ValueProperty" SelectedItem="{Binding Status}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
如果您有多个这样的列,请在窗口资源中定义DataTemplate并根据其键将其重新用于列,如下所示:
<DataGridTemplateColumn Header="Parsed Status" CellTemplate="{StaticResource TemplateResourceKey}">
关于c# - WPF ComboBox已关闭,但已选择滚动更改项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274524/