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?
Réponses
Trop de publicités?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 )
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.
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}}}"/>