簡體   English   中英

如何在C#上將MouseDoubleClick事件添加到TreeViewItem

[英]How to add a MouseDoubleClick event on C# to a TreeViewItem

我是WPF和C#編程的新手。

我正在嘗試從代碼中創建一個TreeView來添加數據庫中的數據。 數據分為兩部分:

  • 客戶名稱
  • 一些約會

對我來說,數據的第一部分是主TreeViewItem,第二部分是日期,它掛在TreeView的第一部分。 所有數據都形成為字符串。

我以這種方式將它們添加到我的TreeView中:

// Adding new client to TreeView
TreeViewItem item = new TreeViewItem();
item.Header = entry.Key;
item.ItemsSource = entry.Value.ToArray(); // Adding also the dates
item.MouseDoubleClick += TreeViewItem_MouseDoubleClick; // Here is the problem
try
{
    Arbol_Clientes.Items.Add(item);
}
catch( Exception error)
{
    Console.WriteLine("ERROR: " + error.ToString());
}

問題是,當我單擊TreeView的日期時,該事件由“客戶端名稱”調用,例如:

TreeView示例1

當我雙擊紅色日期時,該事件將藍色TreeViewItem作為調用處理程序的事件顯示出來,在處理程序代碼中,hijo是"ABM"而不是"/2019 0:00:00"

處理程序代碼:


private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs {

    var hijo = sender as TreeViewItem;

    ItemsControl parent = GetSelectedTreeViewItemParent(hijo);

    TreeViewItem treeitem = parent as TreeViewItem;
    string Nombre_Cliente = treeitem.Header.ToString();

    Etiqueta.Content = Nombre_Cliente + " " + hijo.Header.ToString();
}

我想用所有這些實現的最終結果是這樣的xaml:

<TreeView Grid.Column="0" BorderThickness="0" x:Name="Arbol_Clientes">
                <TreeViewItem Header="ABM" IsExpanded="True">
                    <TreeViewItem Header="Enero 2019" MouseDoubleClick="TreeViewItem_MouseDoubleClick"/>
                    <TreeViewItem Header="Febrero 2019" MouseDoubleClick="TreeViewItem_MouseDoubleClick"/>
                </TreeViewItem>
                <TreeViewItem Header="VCF" IsExpanded="True">
                    <TreeViewItem Header="Enero 2019" MouseDoubleClick="TreeViewItem_MouseDoubleClick"/>
                </TreeViewItem>
            </TreeView>

您可以使用VisualTreeHelper類獲得對所單擊元素( e.OriginalSource )的父TreeViewItem的引用:

private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var hijo = FindParent<TreeViewItem>(e.OriginalSource as DependencyObject);
    //...

}

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    var parent = VisualTreeHelper.GetParent(dependencyObject);

    if (parent == null) return null;

    var parentT = parent as T;
    return parentT ?? FindParent<T>(parent);
}

item.MouseDoubleClick + = TreeViewItem_MouseDoubleClick; //這是問題

您沒有訂閱日期項目,因為您沒有訂閱這些項目。 僅頂級節點將附加事件。 您需要在子項目上訂閱活動

請嘗試以下操作:

// Adding new client to TreeView
TreeViewItem item = new TreeViewItem();
item.Header = entry.Key;
foreach (var date in entry.Value.ToArray())
{
    var child = new TreeViewItem();
    child.Header = date;
    child.MouseDoubleClick += TreeViewItem_MouseDoubleClick; // Only subscribe to the child
    item.Items.Add(child);
}
try
{
    Arbol_Clientes.Items.Add(item);
}
catch (Exception error)
{
    Console.WriteLine("ERROR: " + error.ToString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM