Wpf 如何在使用垂直滚动中的导航箭头时禁用双击事件?

Wpf 如何在使用垂直滚动中的导航箭头时禁用双击事件?,wpf,datagrid,wpf-controls,Wpf,Datagrid,Wpf Controls,我的wpf应用程序中有一个dataGrid,我使用双击鼠标事件来显示dataGrid中所选元素的详细信息 但是,我在使用垂直滚动的导航箭头时遇到了一个问题,因为快速单击鼠标按钮,然后触发双击事件是很常见的,但我只想在数据网格的行中双击时显示详细信息,而不是在导航箭头中 在导航箭头中单击时,如何禁用双击事件 谢谢 编辑: 我找到了一个使用鼠标输入绑定和手势的解决方案。似乎只有在我双击行区域,而不是垂直或水平滚动条时,输入绑定才会触发命令。但是,如果表格只有几行,您看到最后一行下方的灰色区域,我双击

我的wpf应用程序中有一个dataGrid,我使用双击鼠标事件来显示dataGrid中所选元素的详细信息

但是,我在使用垂直滚动的导航箭头时遇到了一个问题,因为快速单击鼠标按钮,然后触发双击事件是很常见的,但我只想在数据网格的行中双击时显示详细信息,而不是在导航箭头中

在导航箭头中单击时,如何禁用双击事件

谢谢

编辑: 我找到了一个使用鼠标输入绑定和手势的解决方案。似乎只有在我双击行区域,而不是垂直或水平滚动条时,输入绑定才会触发命令。但是,如果表格只有几行,您看到最后一行下方的灰色区域,我双击该区域,则事件为fire,因此我也会遇到同样的问题,但至少在使用滚动条时解决了问题

解决办法是:

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)); }
}

视图模型

<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)); }
}
private RelayCommand dgdcomponent鼠标双击命令;
公共中继命令DGD组件鼠标双击命令
{
获取{return}
}

在这种情况下,事件处理程序应直接放置在
DataGridRow
上。大概是这样的:

Style

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

我试图阻止事件
ScrollViewer
(e.Handled=true),但它没有用。事件同时被触发,在这两种情况下,源
DataGrid
。显然,这是因为
ScrollViewer
DataGrid
的一部分

此解决方案使用代码隐藏。我正在使用MVVM灯和MVVM模式,你能给我一个使用这种模式的例子吗?谢谢。@阿尔瓦罗·加西亚:好的,你能描述一下这个图案应该是什么样子吗?如果我理解正确,您有一个双击处理程序,您希望他使用
DataGridRow
进行操作。你在这里干什么?在我的示例中,您只需为每一行指定此处理程序(通过样式)。对不起,如果没有正确理解。