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

时间:2016-04-25 13:36:40

标签: c# wpf mvvm treeview

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

  • 当用户点击Edit ContextMenu
  • 中的TreeView按钮时
  • 当用户在TreeView的所选项目上单击F2时。

我的TreeView的xaml:

<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>

我的第一个想法是在TextBox中使用TextBlock而不是HierarchicalDataTemplate。但是,TextBox启用了MouseClick的修改模式。因此,这不是我想要的。

关于我该怎么做的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以使用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)
            {
                //...
            }
        }
    }