TextBox в TreeViewItem DataTemplate Событие LostFocus не запускается - PullRequest
0 голосов
/ 24 сентября 2019

Я делаю 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?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...