3

wpfアプリケーションにデータグリッドを追加しました。

<DataGrid ItemsSource="{Binding Projects}" SelectedItem="{Binding SelectedProject}" MouseDoubleClick="DataGrid_MouseDoubleClick" />

これが私の背後にあるコードです

private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    if selected row is header
        then do this
    else
        do this
}

ここで問題となるのは、どちらがダブルクリックされているかをどうやって知るようになったのかということです。ヘッダーまたは行です。どうすればそれを見つけることができますか。

4

2 に答える 2

6

DataGridにダブルクリックイベントを追加する代わりに、DataGridRowとDataGridColumnHeaderに個別のイベントを追加します。更新されたXAML:

<DataGrid ItemsSource="{Binding Projects}" SelectedItem="{Binding SelectedProject}" MouseDoubleClick="DataGrid_MouseDoubleClick"> 
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="DataGridRow_MouseDoubleClick" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Resources>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="MouseDoubleClick" Handler="DataGridColumnHeader_MouseDoubleClick" />
        </Style>
    </DataGrid.Resources>
</DataGrid>

そして、ここにコードビハインドがあります。

private void DataGridRow_MouseDoubleClick(object sender, System.Windows.RoutedEventArgs e)
{
    // This is when a row is double clicked.
}

private void DataGridColumnHeader_MouseDoubleClick(object sender, System.Windows.RoutedEventArgs e)
{
    // This is when header is double clicked.
}
于 2012-10-17T09:06:41.293 に答える
0

VisualTreeHelperを使用できます。

private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
        var dep = e.OriginalSource as DependencyObject;
        //go up the tree until you find the header
        while (dep != null && !(dep is DataGridRowHeader)) {
            dep = VisualTreeHelper.GetParent(dep);
        }
        //header found
        if (dep is DataGridRowHeader)
            //do this
        else //header not found
            //do that
}
于 2012-10-17T06:30:59.593 に答える