2011-11-05 67 views
0

我想在wpf的窗口中設置樹視圖並通過鼠標事件來利用它。特別是,我想通過在樹形視圖的每個項目上單擊鼠標來在畫布上繪製複雜的形狀。但是我不確定樹視圖是否可以達到這個目的,因爲我提出的實現似乎根本不起作用。鼠標事件不起作用(代表未被觸發)。有人能指出我的原因嗎?看一看代碼:Treeview上的鼠標事件

<TreeView DockPanel.Dock="Left" Background="DarkGray" HorizontalAlignment="Left" VerticalAlignment="Top"> 
    <TreeViewItem Header="Input Data"> 
     <TreeViewItem Header="Vector" MouseEnter="create_Rhombus"/> 
     <TreeViewItem Header="Array"/> 
    </TreeViewItem> 
    <TreeViewItem Header="Maths"> 
     <TreeViewItem Header="Add" MouseDown="create_AddRectangle"/> 
     <TreeViewItem Header="Subtract" MouseDown="create_SubtractRectangle"/> 
     <TreeViewItem Header="Multiply" MouseDown="create_MultiplyRectangle"/> 
     <TreeViewItem Header="Divide" MouseDown="create_DivideRectangle"/> 
    </TreeViewItem> 
</TreeView> 

代碼隱藏文件的方法是:

private void create_AddRectangle(object sender, MouseButtonEventArgs e) 

private void create_SubtractRectangle(object sender, MouseButtonEventArgs e) 

...。

但是上述方法沒有被調用。爲什麼?

回答

2

這大概是因爲選擇功能,鼠標事件被標記爲內部處理。嘗試使用tunneling版本的此類事件(即PreviewMouseDown)。

0

我認爲可能存在使用隧道的問題(即PreviewMouseDown)。我實現了它,它正確啓動,但如果我嘗試訪問DataContext,我得到一個{DisconnectedItem}對象。從我在線完成的閱讀中,這似乎是WPF的一個錯誤。

我發現我可以絲單TreeViewItem一個MouseLeftButtonDownMouseRightButtonDown事件同樣的方法,它會工作正是你所期望的MouseDown事件相同的方式工作。