我在c#4.0中使用DataGrid
和CheckBoxColumn
。现在如果我启用行选择,我需要2次点击才能更改CheckBox
的状态。
单击一次选择行,第二次更改CheckBox
的状态。如何启用行选择,但保持1次单击以更改CheckBoxColumn
的状态?
<DataGrid AutoGenerateColumns="False"
SelectionMode="Single" SelectionUnit="CellOrRowHeader"
ItemsSource="{Binding}"
Height="200" HorizontalAlignment="Left" Margin="28,43,0,0"
Name="gridPersons" VerticalAlignment="Top" Width="292" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="SizeToCells" MinWidth="150"
Binding="{Binding Name}"
IsReadOnly="True"/>
<DataGridCheckBoxColumn Header="Selected" Width="SizeToCells" MinWidth="100"
Binding="{Binding IsSelected}"
IsReadOnly="false"/>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:2)
查看this问题的已接受答案 - 它使用带有标准CheckBox的DataTemplateColumn而不是CheckBoxColumn。这为您提供单击编辑,如果您启用了行选择,它也可以使用。 HTH。
答案 1 :(得分:0)
将SelectedCellsChanged事件处理程序添加到网格中:
SelectedCellsChanged="gridPersons_SelectedCellsChanged"
下面是事件处理程序的代码,它将所选单元格置于编辑模式并模拟其上的一个额外鼠标点击,这将切换复选框。
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
}
[DllImport("user32.dll")]
static extern uint GetCursorPos(out POINT lpPoint);
private void gridPersons_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
// check here if this is the cell with a check box
gridPersons.BeginEdit();
POINT point;
GetCursorPos(out point);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, point.X, point.Y, 0, 0);
}
希望这有帮助,尊重