2011-08-19 36 views
0

我想使用WPF中的TreeView.AfterCollapse事件。 有沒有一種方法來使用它? 爲什麼WPF中不支持所有的事件? 謝謝爲什麼不是WPF控件中的所有事件

+2

的System.Windows.Forms.TreeView是不同於System.Windows.Controls.TreeView的控件。在WinForms中你將使用一個,而在WPF中你將使用另一個。不知道爲什麼這個事件沒有被微軟遷移。 – fatty

+0

是的好我知道,但我想知道如果不知何故我可以添加一個事件從system.windows.forms.treeview到我的System.Windows.Controls.TreeView。 –

+3

你不能。像脂肪說,他們是兩個完全不同的控制。這與WPF支持並非所有WinForms事件的原因相同,因爲** WinForms不僅僅是WPF **。 – BoltClock

回答

6

TreeViewItemCollapsed事件,這相當於Windows窗體的AfterCollapsed事件。此事件最初由TreeViewItem提出,而不是TreeView,但由於這是冒泡事件,因此也會在TreeView之後提出,所以如果需要,您可以在此級別處理它。您可以使用OriginalSource屬性來獲取對引發事件的TreeViewItem

XAML

<TreeView TreeViewItem.Collapsed="TreeViewItem_Collapsed" ...> 

代碼隱藏

private void TreeViewItem_Collapsed(object sender, RoutedEventArgs e) 
{ 
    TreeViewItem tvi = (TreeViewItem)e.OriginalSource; 
    ... 
} 
+0

我知道如何使用TreeViewItem摺疊。但我的問題是我的treevieitem崩潰後,我的多重綁定生成其他treeviewitems,我想訪問它們。所以我想如果我有一個事件發生後,TreeViewItem崩潰和REFILLED我會看到我新的新創建的TreeViewItem。我應該發佈另一個更具體的問題 –

+0

@Mohamed,如果您的TreeViewItems是通過綁定生成的,請查看| ItemContainerGenerator](http://msdn.microsoft.com/zh-cn/library/system.windows.controls .itemscontrol.itemcontainergenerator.aspx)屬性 –

0

您可以擴展TreeViewItem對象以添加此功能。

下面是我用過的一個例子。它來自微皺,其MSDN職位救了我幾次:

public class MyTreeViewItem : TreeViewItem 
{ 
    public static readonly RoutedEvent CollapsingEvent = 
     EventManager.RegisterRoutedEvent("Collapsing", 
     RoutingStrategy.Bubble, typeof(RoutedEventHandler), 
     typeof(MyTreeViewItem)); 
    public static readonly RoutedEvent ExpandingEvent = 
     EventManager.RegisterRoutedEvent("Expanding", 
     RoutingStrategy.Bubble, typeof(RoutedEventHandler), 
     typeof(MyTreeViewItem)); 
    public event RoutedEventHandler Collapsing 
    { 
     add { AddHandler(CollapsingEvent, value); } 
     remove { RemoveHandler(CollapsingEvent, value); } 
    } 
    public event RoutedEventHandler Expanding 
    { 
     add { AddHandler(ExpandingEvent, value); } 
     remove { RemoveHandler(ExpandingEvent, value); } 
    } 
    protected override void OnExpanded(RoutedEventArgs e) 
    { 
     OnExpanding(new RoutedEventArgs(ExpandingEvent, this)); 
     base.OnExpanded(e); 
    } 
    protected override void OnCollapsed(RoutedEventArgs e) 
    { 
     OnCollapsing(new RoutedEventArgs(CollapsingEvent, this)); 
     base.OnCollapsed(e); 
    } 
    protected virtual void OnCollapsing(RoutedEventArgs e) { RaiseEvent(e); } 
    protected virtual void OnExpanding(RoutedEventArgs e) { RaiseEvent(e); } 
} 
+0

這是沒有用的......當你的Collapsing事件發生時,TreeViewItem已經被摺疊了。 OnCollapsed不會摺疊TreeViewItem,它只會引發事件... –

+0

@Josh謝謝你,但我想AfterExpanding(和重填)事件。 –

相關問題