我有点WPF noob,所以在这个问题上的任何固有的愚蠢道歉(!)双击可编辑的WPF treeview项目? (与样式?)
我试图启用编辑的WPF treeview标签与doubleclick - 已经搜索了这个,看起来这样做的两种方式是使用自定义控件或隐藏TextBox/TextBlock之一的样式。
使用样式将标签设置为基于DataTrigger的文本框似乎很容易(例如下面的1),但这意味着任何时候选中某行,它都会被“编辑”。
我真的很想做的事情是在mousedoubleclick事件上启用这个(过渡到文本框),但似乎EventTriggers不能以下面的方式使用,因为它们是瞬态的。 (似乎我无法在代码隐藏中简单地使用DoubleClick事件,因为它不会(?)允许我影响显示的控件以显示/隐藏文本框)。
使用一个完全成熟的自定义控件看起来像另一种选择 - 这里有一个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>