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 回答