65 votes

Comment lier la commande Fermer à un bouton

Le moyen le plus simple consiste à implémenter le gestionnaire d'événements ButtonClick et à invoquer la méthode Window.Close (). Mais comment faire cela avec une liaison de commande?

80voto

Nicholas Armstrong Points 2931

Tout ce qu'il faut, c'est un peu de XAML ...

 <Window x:Class="WCSamples.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Window.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Close"
                        Executed="CloseCommandHandler"/>
    </Window.CommandBindings>
    <StackPanel Name="MainStackPanel">
        <Button Command="ApplicationCommands.Close" 
                Content="Close Window" />
    </StackPanel>
</Window>
 

Et un peu de C # ...

 private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    this.Close();
}
 

(adapté de cet article MSDN )

67voto

theDmi Points 1307

En fait, il EST possible sans code c#. La clé est d'utiliser des interactions:

<Button Content="Close">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <ei:CallMethodAction TargetObject="{Binding ElementName=window}" MethodName="Close"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>

Pour que cela fonctionne, il suffit de régler le x:Nom de votre fenêtre de "fenêtre", et d'ajouter ces deux espaces de noms:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 

Elles sont contenues dans les assemblées prévues par l'Expression Blend. Dans le cas où vous n'avez pas de Mélange, ils devraient également être inclus dans l'Expression Blend SDK (autant que je sache). Le SDK est gratuit et peut être téléchargé ici:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207

Notez également mon blog post à ce sujet.

54voto

Nir Points 18250

Je pense que dans les scénarios réels, un simple gestionnaire de clics est probablement mieux que des systèmes basés sur des commandes trop compliqués, mais vous pouvez faire quelque chose comme ça:

utilisant RelayCommand de cet article http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

 public class MyCommands
{
    public static readonly ICommand CloseCommand =
        new RelayCommand( o => ((Window)o).Close() );
}

<Button Content="Close Window"
        Command="{X:Static local:MyCommands.CloseCommand}"
        CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
 

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