Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF工具包Datagrid-如何关闭选择?_C#_Wpf_Xaml_Datagrid_Wpftoolkit - Fatal编程技术网

C# WPF工具包Datagrid-如何关闭选择?

C# WPF工具包Datagrid-如何关闭选择?,c#,wpf,xaml,datagrid,wpftoolkit,C#,Wpf,Xaml,Datagrid,Wpftoolkit,我在WPF中有一个绑定到对象的datagrid 我有一个DataGridCheckBoxColumn在那里,我希望用户能够通过它并勾选他们想要的。问题是他们必须单击两次,一次用于选择,然后再次选中/取消选中。你到底是怎么关掉的,我一直在寻找答案。datagrid具有SelectionMode和SelectionUnit属性,它们都不接受“无”或“消失” 感谢您的帮助!下面是我的代码供参考 <my:DataGrid Margin="15" Name="dgPreview"

我在WPF中有一个绑定到对象的datagrid

我有一个DataGridCheckBoxColumn在那里,我希望用户能够通过它并勾选他们想要的。问题是他们必须单击两次,一次用于选择,然后再次选中/取消选中。你到底是怎么关掉的,我一直在寻找答案。datagrid具有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>

第一次单击将单元格置于编辑模式,然后第二次单击允许您修改复选框。您可以通过使用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只是让复选框在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>

首先,我知道这是一个很老的问题,但我仍然认为我会尝试回答它

几天前,我遇到了同样的问题,并找到了一个令人惊讶的简短解决方案(请参阅)。基本上,您只需将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狂热者眼中的地位;)

关于这个主题的新问题,有很多好的答案:在WPF4.0中不适用于我。谢谢你的风格。:)在WPF4.0中为我工作。但是,我在编译时收到警告,并且在样式中的“BasedOn”-标记的设计器中:
未找到资源“{x:Type CheckBox}”
我只是删除了它,它仍然有效。根据之前的注释删除样式引用。应该是这样的:答案和上面的一样。谢谢你的回答。在点击复选框实际上并没有改变底层对象的意义上,上述方法对我来说并不适用。我相信你在Mode=TwoWay中添加的事实解决了这个问题。