Я немного новичок в WPF, поэтому прошу прощения за любую врожденную глупость в этом вопросе (!)
Я пытаюсь разрешить редактирование меток в виде дерева WPF двойным щелчком мыши - я обыскал это, и похоже, что два способа сделать это с помощью пользовательского элемента управления или со стилем, который скрывает один из TextBox /TextBlock.
Использование стиля для установки метки в виде textBox на основе DataTrigger кажется достаточно простым (например, 1 ниже), но это означает, что каждый раз, когда выбирается строка, она «редактируется».
Что я действительно хотел бы сделать, так это включить это (Переход к текстовому полю) для события mousedoubleclick, но кажется, что EventTriggers не могут быть использованы описанным ниже способом, потому что они временные. (Кажется, я не могу просто использовать событие DoubleClick в codebehind, потому что это не (??) позволяет мне влиять на отображаемые элементы управления, чтобы показать / скрыть текстовые поля).
Использование полноценного пользовательского элемента управления кажется альтернативой - здесь есть рабочий пример AAALMOST (http://www.codeproject.com/KB/WPF/editabletextblock.aspx), однако он не работает при наличии предложений HierachicalDataTemplate (и он не выглядит как решение предстоящее).
(например, 1 - переключаться из текстового блока в текстовое поле, если выбрано)
<Window x:Class="treetest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:treetest"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style x:Key="EditableContentControl" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:CompositeViewModel}">
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected,RelativeSource=RelativeSource AncestorType={x:Type TreeViewItem}}}"
Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:CompositeViewModel}">
<TextBox Text="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TreeView Margin="12,12,115,12" Name="treeView1"
ItemsSource="{Binding Path=GetRootData}"
>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:CompositeViewModel}" ItemsSource="{Binding Path=Children}">
<ContentControl Content="{Binding}" Style="{StaticResource EditableContentControl}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>