我正在尝试为我的关闭按钮创建一个通用事件,他们必须在其中关闭窗口,但在此之前将焦点设置到所有者窗口。我不想为每个文件都设置一个事件,因为这非常不切实际,因为我的应用程序中有 30 多个窗口。(所以如果我想改变这种行为,我每次都必须改变 30 个文件)
我不确定这是否是正确的方法,但我尝试制作一个返回 adelegate(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。
难道我做错了什么?这是最好的方法还是我有其他选择?提前致谢!
克拉克