J'essaie de créer un événement généralisé pour mes boutons de fermeture, dans lesquels ils doivent fermer la fenêtre, mais avant de définir le focus sur la fenêtre du propriétaire. Je ne veux pas avoir d'événement pour chaque fichier, car ce serait plutôt peu pratique puisque j'ai plus de 30 fenêtres dans mon application. (Donc, si je voulais changer ce comportement, je devrais changer sur 30 fichiers à chaque fois)Extensions de balisage personnalisées return RoutedEvents
Je ne suis pas sûr si c'est l'approche correcte, mais j'ai essayé de faire une extension MarkUp qui renvoie un delegate(object sender, RoutedEventArgs e)
Voici la code:
delegate void RoutedDelegate(object sender, RoutedEventArgs e);
[MarkupExtensionReturnType(typeof(RoutedEvent))]
public class CloseWindowExtension : MarkupExtension
{
Window win = null;
public Window Win
{
get { return this.win; }
set { this.win = value; }
}
public CloseWindowExtension(Window win)
: base()
{
this.win = win;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (win == null)
{
throw new InvalidOperationException("The window must be specified!");
}
return new RoutedDelegate(delegate(object sender, RoutedEventArgs e)
{
Extensions.FocusClose(win);
});
}
}
La méthode FocusClose obtient une fenêtre, la ferme, mais définit le focus à son propriétaire avant. Mais je ne peux pas le faire fonctionner. Quand je tournerai mon bouton dans le XAML,
Button Click="{e:CloseWindow {Binding win}}"
(victoire est mon nom de la fenêtre), je reçois le message d'erreur:
Cliquez = "{e: CloseWindow {gagnant Binding}}" est pas valide . '{e: CloseWindow {Binding win}}' n'est pas un nom de méthode de gestionnaire d'événements valide. Seules les méthodes d'instance de la classe generated ou code-behind sont valides. Ligne 28 Position 17.
Est-ce que je fais quelque chose de mal? Est-ce la meilleure approche ou ai-je d'autres options? Merci d'avance!
Clark