2010-08-02 4 views
0

Je crée une commande qui aura un contrôle Textbox comme cible.Commandes WPF - modification de la propriété du contrôle cible

code pour créer la commande:

public class Commands 
{ 
    public static RoutedCommand Appender; 

    static Commands() 
    { 
     Appender = new RoutedCommand(); 
    } 

    public static void AppenderExecuted(object target, ExecutedRoutedEventArgs e) 
    { 
     System.Windows.Controls.TextBox targetTbox = target as System.Windows.Controls.TextBox; 
     if (targetTbox != null) 
     { 
      targetTbox.Text += "AppendedText"; 
     } 
    } 
} 

XAML:

<StackPanel Name="span" FocusManager.IsFocusScope="True"> 
    <Menu IsMainMenu="True"> 
     <MenuItem Header="Tools"> 
      <MenuItem Header="_Append" Name="menuAppend" /> 
     </MenuItem> 
    </Menu> 
    <TextBox Height="100" Name="txtEdit"></TextBox> 
</StackPanel>  

CS: constructeur de fenêtre:

 //create bindings 
     CommandBinding bindingTM = new CommandBinding(Commands.Appender, Commands.AppenderExecuted); 

     //[THIS DOESN'T WORK] 
     this.CommandBindings.Add(bindingTM); 

     //[THIS WORKS] 
     txtEdit.CommandBindings.Add(bindingTM); 

     //associate command 
     menuAppend.Command = Commands.Appender; 

Je voudrais pouvoir utiliser la commande Appender sur n'importe quel TextBox sur la fenêtre, sans le besoin d'ajouter la liaison de commande à chaque TextBox.

-> Pourquoi l'ajout de la commande de liaison à Windows ne fonctionne pas?
-> Des solutions?

Répondre

1

Essayez:

public static void AppenderExecuted(object target, ExecutedRoutedEventArgs e) { 
    System.Windows.Controls.TextBox targetTbox = e.OriginalSource as System.Windows.Controls.TextBox; 
    if (targetTbox != null) { 
      targetTbox.Text += "AppendedText"; 
    } 
} 
Questions connexes