Я пытаюсь создать обобщенное событие для моих кнопок Закрыть, где они должны закрыть окно, но перед этим установить фокус на окно владельца. Я не хочу иметь событие для каждого файла для этого, потому что это было бы довольно непрактично, так как в моем приложении более 30 окон. (Поэтому, если бы я хотел изменить это поведение, мне нужно было бы каждый раз менять 30 файлов)
Я не уверен, что это правильный подход, но я попытался создать расширение MarkUp, которое возвращает delegate(object sender, RoutedEventArgs e)
Вот код:
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);
});
}
}
Метод FocusClose возвращает окно, закрывает его, но предварительно устанавливает его владельца. Но я не могу заставить это работать. Когда я устанавливаю свою кнопку в xaml,
Button Click="{e:CloseWindow {Binding win}}"
(win - это имя моего окна), я получаю сообщение об ошибке:
Click = "{e: CloseWindow {Binding win}}" недействителен. «{e: CloseWindow {Binding win}}» не является допустимым именем метода обработчика событий. Допустимы только методы экземпляра в сгенерированном классе или классе с выделенным кодом. Строка 28, позиция 17.
Я что-то не так делаю? Это лучший подход или у меня есть другие варианты?
Заранее спасибо!
Clark