2

wpf アプリケーションに dataGrid があり、ダブルクリック マウス イベントを使用して、dataGrid で選択された要素の詳細を表示します。

ただし、垂直スクロールのナビゲーション矢印を使用すると問題が発生します。マウスボタンをすばやくクリックすると、ダブルのイベントが発生することが非常に一般的ですが、ダブルクリックしたときにのみ詳細を表示したいからですナビゲーション矢印ではなく、データグリッドの行。

ナビゲーション矢印をクリックしたときにダブルクリック イベントを無効にするにはどうすればよいですか?

ありがとう。

編集: マウス入力バインディングとジェスチャを使用するソリューションを見つけました。垂直または水平スクロールバーではなく、行ゾーンをダブルクリックした場合にのみ、入力バインディングがコマンドを起動するようです。ただし、テーブルに数行しかなく、最後の行の下に灰色のゾーンが表示され、このゾーンをダブルクリックすると、イベントが発生するため、同じ問題が発生しますが、少なくともスクロールバー。

解決策は次のとおりです。

AXML

<DataGrid>
    <DataGrid.InputBindings>
                <MouseBinding Gesture="LeftDoubleClick" Command="{Binding DgdComponentesMouseDoubleClickCommand}" CommandParameter="{Binding ElementName=dgdComponentes, Path=SelectedItems, Mode=OneWay}"/>
                <KeyBinding Key="Enter" Command="{Binding DgdComponentesMouseDoubleClickCommand}" CommandParameter="{Binding ElementName=dgdComponentes, Path=SelectedItems, Mode=OneWay}"/>
    </DataGrid.InputBindings>
</DataGrid>

ビューモデル

private RelayCommand<object> _dgdComponentesMouseDoubleClickCommand;
public RelayCommand<object> DgdComponentesMouseDoubleClickCommand
{
    get { return _dgdComponentesMouseDoubleClickCommand ?? (_dgdComponentesMouseDoubleClickCommand = new RelayCommand<Object>(dgdComponentesMouseDoubleClick)); }
}
4

1 に答える 1

2

この場合、イベント ハンドラは に直接配置する必要がありDataGridRowます。このようなもの:

Style

<Style BasedOn="{StaticResource {x:Type DataGridRow}}" TargetType="{x:Type DataGridRow}">
    <EventSetter Event="MouseDoubleClick" Handler="SampleDataGrid_MouseDoubleClick" />
</Style>

Handler

private void SampleDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("Out some info...");
}   

ScrollViewerイベント(e.Handled = true)をブロックしようとしましたが、役に立ちません。イベントは同時にトリガーされ、どちらの場合も source DataGrid. どうやら、これは が のScrollViewer一部であるためDataGridです。

于 2013-08-19T09:44:58.960 に答える