通过 ContextMenu 或 HotKey 在 TreeView 中编辑项目
Editing item in TreeView by ContextMenu or HotKey
我想在 TreeView
中启用对项目的编辑,仅在两种情况下:
- 当用户单击
TreeView
ContextMenu
中的 Edit
按钮时
- 当用户在 TreeView 的选定项目上单击
F2
时。
我的 xaml 的 TreeView
:
<TreeView ItemsSource="{Binding FooColl}" >
<TreeView.Resources>
<DiscreteObjectKeyFrame x:Key="proxy" Value="{Binding}"/>
<HierarchicalDataTemplate DataType="{x:Type treeViewModel:NodeViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<Image Source="treeNode.png" />
<TextBlock Text="{Binding FooValue}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
我的第一个想法是在 HierarchicalDataTemplate
中使用 TextBox
而不是 TextBlock
。但是,TextBox
的编辑模式是由MouseClick
启用的。因此,这不是我想要的。
关于我该怎么做的任何想法?
您可以使用 IsReadOnly 属性:
<TextBlock Text="{Binding FooValue}" IsReadOnly="{Binding ImReadOnly}">
要处理 F2 按键,你可以试试这个:
public partial class MyView : UserControl
{
public MyView()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(KeyDownEvent);
}
private void KeyDownEvent(object sender, KeyEventArgs e)
{
try
{
switch (e.Key)
{
case Key.F2:
var vm = this.DataContext as YourViewModel;
vm.YourCommand.Execute(null);
break;
}
}
catch (Exception ex)
{
//...
}
}
}
我想在 TreeView
中启用对项目的编辑,仅在两种情况下:
- 当用户单击
TreeView
ContextMenu
中的Edit
按钮时 - 当用户在 TreeView 的选定项目上单击
F2
时。
我的 xaml 的 TreeView
:
<TreeView ItemsSource="{Binding FooColl}" >
<TreeView.Resources>
<DiscreteObjectKeyFrame x:Key="proxy" Value="{Binding}"/>
<HierarchicalDataTemplate DataType="{x:Type treeViewModel:NodeViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<Image Source="treeNode.png" />
<TextBlock Text="{Binding FooValue}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
我的第一个想法是在 HierarchicalDataTemplate
中使用 TextBox
而不是 TextBlock
。但是,TextBox
的编辑模式是由MouseClick
启用的。因此,这不是我想要的。
关于我该怎么做的任何想法?
您可以使用 IsReadOnly 属性:
<TextBlock Text="{Binding FooValue}" IsReadOnly="{Binding ImReadOnly}">
要处理 F2 按键,你可以试试这个:
public partial class MyView : UserControl
{
public MyView()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(KeyDownEvent);
}
private void KeyDownEvent(object sender, KeyEventArgs e)
{
try
{
switch (e.Key)
{
case Key.F2:
var vm = this.DataContext as YourViewModel;
vm.YourCommand.Execute(null);
break;
}
}
catch (Exception ex)
{
//...
}
}
}