簡體   English   中英

TreeViewItem DataTemplate LostFocus 事件中的文本框未觸發

[英]TextBox in TreeViewItem DataTemplate LostFocus event not firing

我通過在兩個不同的DataTemplate之間切換來制作一個EditableTextBox以在TreeViewItem中使用它。 現在進入編輯模式工作正常,我正在尋找一種退出購買點擊任何地方的方法。

Item 的ViewModel僅具有一個屬性IsEditable ,用於在此處在兩個DataTemplate之間切換。

我認為TextBox LostFocus將成為 go 的方式,但此事件不會觸發,因此EditableTextBox保持在編輯模式,除非我 select 另一個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?

謝謝

“有沒有辦法獲取任何類型的事件,有助於知道在 TextBox 外部發生了點擊,從而將 IsEditable 屬性更改為 false?”

僅關於這句話,您可以輕松使用

System.Windows.Input.MouseButtonEventHandler

也許對你來說有點太多了,但你可以通過 EventArgs 過濾點擊了什么樣的控件等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM