WPF Toolkit Datagrid - 如何关闭选择?
Posted
技术标签:
【中文标题】WPF Toolkit Datagrid - 如何关闭选择?【英文标题】:WPF Toolkit Datagrid - how do you turn selection off? 【发布时间】:2010-11-16 14:02:51 【问题描述】:我在 WPF 中有一个要绑定到对象的数据网格。
我在那里有一个 DataGridCheckBoxColumn,我希望用户能够通过它并勾选他们想要的那些。问题是他们必须点击两次,一次选择然后再次选中/取消选中。你到底是怎么关掉这个的,我一直在寻找很久才能找到答案的方法。数据网格具有 SelectionMode 和 SelectionUnit 属性——它们都不接受“无”或“离开”
感谢任何帮助!我的代码如下供参考
<my:DataGrid Margin="15" Name="dgPreview"
AutoGenerateColumns="False" CanUserSortColumns="True"
CanUserDeleteRows="True"
Background="White"
ColumnHeaderHeight="20"
VerticalScrollBarVisibility="Visible"
RowDetailsVisibilityMode="Visible"
>
<my:DataGrid.Columns>
<my:DataGridCheckBoxColumn MinWidth="50" Width="Auto" Header="Include" Binding="Binding Include" />
<my:DataGridTextColumn MinWidth="50" Width="Auto" Header="Override #" Binding="Binding OverrideNumber" />
<my:DataGridTextColumn MinWidth="220" Width="*" Header="Name" Binding="Binding Name" />
<my:DataGridTextColumn MinWidth="50" Width="Auto" IsReadOnly="True" Header="Preview" Binding="Binding Preview" />
</my:DataGrid.Columns>
</my:DataGrid>
【问题讨论】:
关于这个主题的新问题,有很多很好的答案:***.com/questions/3833536/… 【参考方案1】:第一次单击将单元格置于编辑模式,然后第二次单击允许您修改复选框。您可以通过使用 DataGridTemplateColumn 而不是 DataGridCheckBoxColumn 来更改此行为。将您的 DataGridCheckBoxColumn 替换为:
<my:DataGridTemplateColumn MinWidth="50" Width="Auto" Header="Include" SortMemberPath="Include">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Style="StaticResource DataGridCheckBoxStyle" IsChecked="Binding Path=Include" />
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
DataGridCheckBoxStyle 只是让 CheckBox 在 DataGrid 中看起来更好看:
<Style x:Key="DataGridCheckBoxStyle" TargetType="CheckBox" BasedOn="StaticResource x:Type CheckBox">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="8,0,3,0" />
</Style>
【讨论】:
在 WPF 4.0 中对我不起作用。不过谢谢你的风格。 :) 在 WPF 4.0 中为我工作。但是,我在编译时收到警告,并且在样式中的“BasedOn”标签的设计器中:The Resource "x:Type CheckBox" was not found
我刚刚删除了它,它仍然有效。
根据之前的评论删除样式参考。应该如下所示: 首先,我知道这是一个很老的问题,但我仍然想尝试回答它。
几天前我遇到了同样的问题,并且遇到了一个令人惊讶的简短解决方案(请参阅this blog)。基本上,您需要做的就是将 XAML 中的 DataGridCheckBoxColumn
定义替换为以下内容:
<DataGridTemplateColumn Header="MyCheckBoxColumnHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="Binding Path=MyViewModelProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这个解决方案的好处是显而易见的——它只支持 XAML;因此,它有效地避免了您使用额外的 UI 逻辑来负担您的代码,并帮助您保持您在 MVVM ***者眼中的地位;)。
【讨论】:
和上面那个答案一样。 感谢您的回答。在单击复选框实际上并没有更改底层对象的意义上,上述内容对我不起作用。我相信您在 Mode=TwoWay 中添加的事实解决了这个问题。以上是关于WPF Toolkit Datagrid - 如何关闭选择?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WPF Toolkit Datagrid 更改单元格的背景颜色
.NET 4 WPF Datagrid 和 WPF Toolkit Datagrid 之间的差异