當TreeViewItem是像Textbox一樣的輸入控件時,TreeView的SelectedItemChanged事件和SelectedItem屬性不會發生。下面的代碼示例通過在TreeView SelectedItemChanged事件中放置斷點來說明問題。當選擇「字符串標題」時,此斷點將觸發,但不會顯示「文本框標題」。TreeView SelectedItem行爲與TextBox子代
我假設文本框或RichTextbox(我的真實應用程序)正在吃一些重要的冒泡事件。我怎樣才能讓TreeView SelectedItem爲TextBox行爲,就像控制Label一樣?
注意:如果我可以解決此問題,則需要雙向綁定到SelectedItem,因爲我使用的是MVVM和MEF。 SelectedItem是隻讀的,這是問題,我打算用(http://silverscratch.blogspot.com/2010/11/two-way-binding-on-treeviewselecteditem.html)解決。我認爲這個相關的鏈接可能有助於某人。
XAML:
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeViewItem>
<TreeViewItem.Header>
<TextBox>
Textbox Header
</TextBox>
</TreeViewItem.Header>
</TreeViewItem>
<TreeViewItem>
<TreeViewItem.Header>
String Header
</TreeViewItem.Header>
</TreeViewItem>
</TreeView>
代碼背後:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
// Breakpoint will fire when "String Header" Selected
// !!! Breakpoint does not fire when Textbox Selected
var newValue = e.NewValue;
var oldValue = e.OldValue;
}
感謝,
恐怕我在簡化我的問題。我的TreeView的文本框TreeViewItems實際上是通過MEF從第三方程序集中獲得的。長話短說我必須處理TreeView上的事件。但是,您認爲我可以/應該在TreeView級別處理冒泡的GotFocus事件嗎? – aidesigner 2012-03-25 03:26:23
當然,即使你將GotFocus =「UIElement_OnGotFocus」移動到TreeView,它也能工作。但不要忘記添加這個檢查處理程序:item!= null(我已經更新了答案) – asktomsk 2012-03-25 04:11:00
真棒!如果可能的話,我必須結束問題。 1)出於理解的目的,你知道爲什麼SelectedItemChanged爲TreeViewItems內容(比如Label)而不是Textbox自動工作 - 什麼是不存在的冒泡事件? 2)在你的鏈接的GetParentObject方法中,最後的手段是使用VisualTreeHelper。爲什麼僅使用VisualTreeHelper查找父級是不夠的? – aidesigner 2012-03-25 12:43:18