为了账号安全,请及时绑定邮箱和手机立即绑定

DoubleClick 在 DataGrid 和 DataTemplate 中均触发

DoubleClick 在 DataGrid 和 DataTemplate 中均触发

C#
慕妹3146593 2023-09-16 17:12:41
长话短说; 我有一个网格内有一个网格。两个网格都有双击事件,这些事件应该触发不同的方法调用(主网格显示一个窗口,而 DataTemplate 中的网格显示一个带有来自所选详细信息行的参数的窗口)。问题是,即使 e.Handled 设置为 true,双击详细信息行也会调用双击主网格。简化的 XAML:<Window x:Class="DoubleClickDataTemplate.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:local="clr-namespace:DoubleClickDataTemplate"        mc:Ignorable="d"        Title="MainWindow" Height="450" Width="800">    <Window.Resources>        <DataTemplate x:Key="LinesGrid">            <DataGrid x:Name="dgLines"                         ItemsSource="{Binding Path=Lines}"                         AutoGenerateColumns="True"                         IsReadOnly="True"                        MouseDoubleClick="dgLines_MouseDoubleClick">            </DataGrid>        </DataTemplate>    </Window.Resources>    <Grid>        <DataGrid x:Name="dgFiles"                     ItemsSource="{Binding}"                     AutoGenerateColumns="True"                     IsReadOnly="True"                    RowDetailsVisibilityMode="VisibleWhenSelected"                    RowDetailsTemplate="{StaticResource LinesGrid}"                     MouseDoubleClick="dgFiles_MouseDoubleClick">        </DataGrid>    </Grid></Window>输出显示,当我双击 DataTemplate/DetailRow 时,这两个事件都会被调用:00:05.616 (00:03:456) dgLines_MouseDoubleClick(object sender, MouseButtonEventArgs e)                      dgFiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)最接近“解决方案”的是使用锁定标志(https://www.oipapio.com/question-3430969),但这可能会在很多方面出错。有没有办法让双击详细信息行只调用相关事件而不是两个事件?
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

您可以处理MouseLeftButtonDown并检查ClickCount外部DataGrid:


private void dgFiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{

    if (e.ClickCount == 2)

    {

        System.Diagnostics.Debug.WriteLine("dgFiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)");

    }

}



private void dgLines_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{

    System.Diagnostics.Debug.WriteLine("dgLines_MouseDoubleClick(object sender, MouseButtonEventArgs e)");

    e.Handled = true;

}

XAML:


<Window.Resources>

    <DataTemplate x:Key="LinesGrid">

        <DataGrid x:Name="dgLines" 

                ItemsSource="{Binding Path=Lines}" 

                AutoGenerateColumns="True" 

                IsReadOnly="True"

                MouseDoubleClick="dgLines_MouseDoubleClick">

        </DataGrid>

    </DataTemplate>

</Window.Resources>

<Grid>

    <DataGrid x:Name="dgFiles" 

            ItemsSource="{Binding}" 

            AutoGenerateColumns="True" 

            IsReadOnly="True"

            RowDetailsVisibilityMode="VisibleWhenSelected"

            RowDetailsTemplate="{StaticResource LinesGrid}" 

            MouseLeftButtonDown="dgFiles_MouseDoubleClick">

    </DataGrid>

</Grid>


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 47 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信