閉じるボタンの一般化されたイベントを作成しようとしています。ウィンドウを閉じる必要がありますが、その前に所有者ウィンドウにフォーカスを設定します。アプリケーションに30以上のウィンドウがあるため、それはかなり非現実的であるため、そのためのすべてのファイルにイベントを設定したくありません。(そのため、その動作を変更したい場合は、毎回 30 個のファイルを変更する必要があります)
それが正しいアプローチかどうかはわかりません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。
私は何か間違ったことをしていますか?これが最善のアプローチですか、それとも別のオプションがありますか? 前もって感謝します!
クラーク