2 votes

WPF : les commandes d'application semblent ignorer CommandTarget

J'ai un TextBox et un ListView dans ma fenêtre, et j'aimerais déplacer le ListView en haut et en bas tandis que le TextBox a une concentration :

enter image description here

Cependant, je n'ai pas l'impression d'obtenir ma CommandTarget à travers les déclarations, elles sont ignorées. MSDN dit c'est le comportement par défaut pour les non RoutedCommands mais les commandes de mouvement que j'essaie d'utiliser sont les suivantes RoutedUICommands donc ce n'est probablement pas le problème ici.

Est-ce que j'ai manqué quelque chose ?

Mon XAML ressemble actuellement à ceci (le code derrière est vide) :

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test Window">
    <StackPanel>
        <TextBox>
            <TextBox.InputBindings>
                <!-- for some reason, these two won't work -->
                <KeyBinding Key="Down" 
                            Command="ComponentCommands.MoveDown"
                            CommandTarget="{Binding ElementName=AllItemsList}"/>
                <KeyBinding Key="Up" 
                            Command="ComponentCommands.MoveUp"
                            CommandTarget="{Binding ElementName=AllItemsList}"/>
            </TextBox.InputBindings>
        </TextBox>
    <ListView x:Name="AllItemsList">
            <ListViewItem>Item 1</ListViewItem>
            <ListViewItem>Item 2</ListViewItem>
            <ListViewItem>Item 3</ListViewItem>
        </ListView>
    </StackPanel>
</Window>

1voto

Ed Bayiates Points 6517

En fait, puisque RoutedUICommand dérive de RoutedCommand, les deux supportent une cible de commande (le MSDN dit en fait que les cibles de commande fonctionnent UNIQUEMENT sur RoutedCommand, mais ce que cela signifie c'est que cela ne fonctionne pas sur les autres objets dérivés de ICommand).

Avez-vous réellement lié les ComponentCommands mentionnées (MoveDown et MoveUp) à la ListView dans votre code ? ListView est vide de liens de commande lorsqu'il est créé pour la première fois, donc vous devez faire quelque chose comme :

AllItemsList.CommandBindings.Add(new CommandBinding(ComponentCommands.MoveDown, ExecuteMoveDown));

Vous devrez alors écrire votre fonction ExecuteMoveDown pour effectuer le déplacement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X