2016-04-25 16 views
0

Ich mag würde ein Element der Bearbeitung in TreeView nur in zwei Fällen aktivieren:Bearbeiten Artikel in TreeView von ContextMenu oder HotKey

  • , wenn ein Benutzer klickt auf Edit Taste in ContextMenu von TreeView
  • , wenn ein Benutzer klicken F2 am ausgewählten Element von TreeView.

Meine XAML von 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> 

Mein erster Gedanke war TextBox statt TextBlock in HierarchicalDataTemplate zu verwenden. Der Bearbeitungsmodus TextBox wird jedoch von MouseClick aktiviert. Folglich ist es nicht, was ich will.

Irgendwelche Gedanken darüber, wie kann ich das tun?

+0

Sie IsReadOnly-Eigenschaft verwenden können? durch defaut es ist falsch und wenn Benutzer auf Bearbeiten klickt, drehen Sie es auf True – Amine

+0

@Amine yeah, ich kann 'IsReadonly' verwenden. – StepUp

+0

Problem gelöst? – Amine

Antwort

1

Sie können IsReadOnly-Eigenschaft verwenden:

<TextBlock Text="{Binding FooValue}" IsReadOnly="{Binding ImReadOnly}"> 

Und F2 Tastendruck zu behandeln, können Sie dies versuchen:

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) 
      { 
       //... 
      } 
     } 
    } 
+0

aber wie kann ich die Bearbeitung mit 'F2' aktivieren? – StepUp

+0

schauen Sie sich dieses Beispiel an: http://stackoverflow.com/questions/2103497/detecting-the-user-pressing-f10-in-wpf – Amine

+0

und wie kann ich das in meinem ViewModel umgehen? – StepUp