1

Button と ContentPresenter を含むカスタム wpf コントロールを作成したいと考えています。WPF コントロールはルックレスであると想定されているため、コントロールの動作を含むと想定されるクラスを作成し、generic.xaml ファイル内にコントロールのデフォルト スタイルを配置しました。ここまでは順調ですね。

しかし、ボタンでイベント (ルーティング イベント?) を発生させ、それをコントロールのクラスで処理するにはどうすればよいでしょうか? Generic.xaml から ResourceDictionary のコード ビハインド ファイルを追加し、そこにイベント ハンドラーを配置できることがわかりましたが、それではコントロールの動作がテンプレートに関連付けられるため、望ましくありません。私が見た (まだ試していない) もう 1 つのアイデアは、TemplatePart メカニズムを使用してテンプレート内のいくつかの主要なコントロールを見つけ、コード内のイベントをサブスクライブすることです。しかし、私のコントロールのユーザーが、コントロールの設計時に私が知っているイベントを持たないコントロールにボタンを置き換えたいと思うかもしれないので、それは私にとって十分に柔軟ではないようです。

では、ボタンがクリックされたときに XAML でイベントを発生させ、コントロールのコード ファイルでサブスクライブするにはどうすればよいでしょうか。

4

1 に答える 1

2

コントロールのOnApplyTemplateメソッドをオーバーライドします。

ここで、テンプレートが適用されていることがわかり、GetTemplateChild を使用してコントロールへの参照を取得できます。

例えば:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    var myButton = this.GetTemplateChild("myButton") as Button;
    if(myButton != null)
    {
        myButton.Click += ...;
}
于 2012-05-22T05:51:46.157 に答える