Я делаю EditableTextBox
, переключаясь между двумя разными DataTemplate
, чтобы использовать его в TreeViewItem
.Теперь вход в режим редактирования работает нормально, и я ищу способ выйти, щелкая где угодно.
У ViewModel
для элемента есть свойство IsEditable
, которое используется здесь для переключения междудва DataTemplate
.
Я думал, что TextBox
LostFocus
будет подходящим способом, но это событие не запускается, поэтому EditableTextBox
остается в режиме редактирования, если я не выберу другой TreeViewItem
.
<DataTemplate x:Key="NormalTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" Margin="3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown" >
<i:InvokeCommandAction Command="{Binding PreviewMouseDownCommand}" CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="EditTemplate">
<StackPanel>
<TextBox Text="{Binding Path=Name}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus" >
<i:InvokeCommandAction Command="{Binding LostFocusCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
</StackPanel>
</DataTemplate>
<HierarchicalDataTemplate DataType="{x:Type ViewModels:DirectoryItem}" ItemsSource="{Binding Items}">
<ContentPresenter Content="{Binding}">
<ContentPresenter.Style>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="ContentTemplate" Value="{StaticResource NormalTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsEditable}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource EditTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>
</HierarchicalDataTemplate>
<TreeView
ItemsSource="{Binding ResourceItems}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Есть ли способ получить событие любого типа, которое помогло бы узнать, что произошел щелчок за пределами TextBox
, и, следовательно, изменить свойство IsEditable
на false?
Спасибо