1

私はSOを検索し、個々のフォームで機能する次のコードを取得しました。

this.KeyDown += new KeyEventHandler(HandleEsc);

private void HandleEsc(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape) 
    { 
        this.Close(); 
    }
}

問題は、アプリ内のすべての WPF フォームで同じコードを作成する必要があることです。コーディングの繰り返しを避けるために、これをテーマ スタイルに入れる方法を探しています。それを行う方法はありますか?

ありがとう、

4

1 に答える 1

0

これはスタイルを使用して行うことはできないと思います。ただし、ウィンドウとクラスの間に新しいレイヤーを作成し、Windowその中間レイヤーに Escape キーの処理を任せることができます。これを行うには、まず という名前の新しいクラスを作成し、次のようEscapeWindowに継承させWindowます。

namespace WpfApplication1
{
    public class EscapeWindow : Window
    {
        public EscapeWindow()
            : base()
        {
            this.KeyDown += new KeyEventHandler(HandleEsc);
        }

        private void HandleEsc(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape) { this.Close(); }
        }
    }
}

これで、新しい Window を作成するたびに、EscapeWindowの代わりにthis から継承させることができますWindow。たとえば、次のMainWindowようになります。

public partial class MainWindow : EscapeWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

WPF ウィンドウは XAML で部分的に定義されているため、その部分的な実装も変更する必要があることに注意してください。この場合、次のMainWindow.xamlようになります。

<local:EscapeWindow x:Class="WpfApplication1.MainWindow" 
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid>
    </Grid>
</local:EscapeWindow>

. _ Window_Escape

于 2013-08-28T22:08:39.787 に答える