TreeView SelectedItem behavior with TextBox children
The SelectedItemChanged event selected and the SelectedItem property of the TreeView do not fire when the TreeViewItem is an input control such as a Textbox. The sample code below illustrates the problem by setting a breakpoint in the TreeView SelectedItemChanged event. This breakpoint will be triggered if "String Header" is selected but not "Header Textbox".
I am assuming that the textbox or RichTextbox (my real application) is some sort of vital event for the bubbles. How can I get the TreeView SelectedItem to behave for the TextBox in the same way as for a control like Label?
Note. If I can solve this problem I will need a two way binding to the SelectedItem since I am using MVVM and MEF. SelectedItem is readonly - the problem I'm planning to solve ( http://silverscratch.blogspot.com/2010/11/two-way-binding-on-treeviewselecteditem.html ). I thought this linked link might help someone.
XAML:
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeViewItem>
<TreeViewItem.Header>
<TextBox>
Textbox Header
</TextBox>
</TreeViewItem.Header>
</TreeViewItem>
<TreeViewItem>
<TreeViewItem.Header>
String Header
</TreeViewItem.Header>
</TreeViewItem>
</TreeView>
Code for:
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;
}
Thank,
source to share
You have to catch the event GotFocus
on TreeView
:
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged"
GotFocus="UIElement_OnGotFocus">
<TreeViewItem>
<TreeViewItem.Header>
<TextBox>Textbox Header</TextBox>
</TreeViewItem.Header>
</TreeViewItem>
<TreeViewItem>
<TreeViewItem.Header>String Header</TreeViewItem.Header>
</TreeViewItem>
</TreeView>
private void UIElement_OnGotFocus(object sender, RoutedEventArgs e)
{
TreeViewItem item = UIHelpers.TryFindParent<TreeViewItem>
((DependencyObject) e.OriginalSource);
if (item != null)
item.IsSelected = true;
}
TryFindParent
You can find the implementation here:
fooobar.com/questions/1788159 / ...
source to share