亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 96 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號