通过 ContextMenu 或 HotKey 在 TreeView 中编辑项目

Editing item in TreeView by ContextMenu or HotKey

我想在 TreeView 中启用对项目的编辑,仅在两种情况下:

我的 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)
            {
                //...
            }
        }
    }