2

私は c# 4.0 で aDataGridを使用しています。現在、行選択を有効にCheckBoxColumnする場合、a の状態を変更するには 2 回クリックする必要があります。CheckBox

1 回のクリックで行が選択され、2 回目のクリックで の状態が変更されますCheckBox。行の選択を有効にするにはどうすればよい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>
4

2 に答える 2

2

この質問の受け入れられた答えを見てください-それはCheckBoxColumnの代わりに標準のCheckBoxでDataTemplateColumnを使用します。これにより、シングルクリック編集が可能になり、行選択が有効になっている場合にも機能します。HTH。

于 2010-07-09T20:56:54.503 に答える
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);
}

これが役に立てば幸いです、よろしく

于 2009-11-15T00:44:07.667 に答える