locked
OnApplyTemplateが呼ばれるタイミングについて RRS feed

  • 質問

  • 損と申します。
    VS2010+Blend4+Silverlight4で開発しております。

    OnApplyTemplateが呼ばれるタイミングが分からず、困っております。

    SilverlightアプリケーションでTestというプロジェクトを作成し、MainPage.xaml.csでOnApplyTemplateをoverrideしました。
    以下のようなコードになりましたが、MessageBoxは表示されません。
    この場合、OnApplyTemplateは呼ばれないものなのでしょうか。
    参考になるページでも構いませんので、ご教示頂けると幸いです。

    using System.Windows;
    using System.Windows.Controls;

    namespace Test
    {
     public partial class MainPage : UserControl
     {
      public MainPage()
      {
       InitializeComponent();
      }

      public override void OnApplyTemplate()
      {
       base.OnApplyTemplate();
       MessageBox.Show("ここは通らない?");
      }
     }
    }

    2011年3月19日 7:44

回答

  • もうこのページは見ているとは思いますが、念のため

    FrameworkElement.OnApplyTemplate メソッド

    http://msdn.microsoft.com/ja-jp/library/system.windows.frameworkelement.onapplytemplate(v=VS.95).aspx

    OnApplyTemplateメソッドはControlTemplateを読み込み、その各部を参照できるようにするたびに呼ばれます。

    ちなみにOnApplyTemplateメソッドは、ControlTemplateで当てたVisual要素にアクセスしたい時などに使われます。UserControlの場合、XAMLで定義したVisual要素には普通にアクセスできるのでOnApplyTemplateメソッドをオーバライドする必要はない気がしますが、どのようなことを行いたいのでしょうか?

    • 回答としてマーク 2011年3月21日 0:37
    2011年3月19日 13:34
  • ご返信、有難うございます。

    ご紹介頂いたページは参照しておりましたが、私の理解力ではUserControlのOnApplyTemplateも呼ばれるように思い、質問いたしました。
    本来の使い方としては、描画が完了した後にコントロールを追加したり、見た目を変更したりすることを想定されているとは思いますが、今回は別の問題の解決策としてOnApplyTemplateが使えないかと調査をしております。

    やりたいこととしては、Loadedイベント内でイベントを処理したいのですが、Loadedイベント内では他のイベント(INotifyDataErrorInfoのGetErrors等)が処理されない(?私の理解力不足?)ようなので、調査をしているという段階です。

    まずはMainPageのUserControlのOnApplyTemplateは呼ばれないということで理解致しました。

    • 回答としてマーク 2011年3月21日 0:37
    2011年3月21日 0:37

すべての返信

  • もうこのページは見ているとは思いますが、念のため

    FrameworkElement.OnApplyTemplate メソッド

    http://msdn.microsoft.com/ja-jp/library/system.windows.frameworkelement.onapplytemplate(v=VS.95).aspx

    OnApplyTemplateメソッドはControlTemplateを読み込み、その各部を参照できるようにするたびに呼ばれます。

    ちなみにOnApplyTemplateメソッドは、ControlTemplateで当てたVisual要素にアクセスしたい時などに使われます。UserControlの場合、XAMLで定義したVisual要素には普通にアクセスできるのでOnApplyTemplateメソッドをオーバライドする必要はない気がしますが、どのようなことを行いたいのでしょうか?

    • 回答としてマーク 2011年3月21日 0:37
    2011年3月19日 13:34
  • ご返信、有難うございます。

    ご紹介頂いたページは参照しておりましたが、私の理解力ではUserControlのOnApplyTemplateも呼ばれるように思い、質問いたしました。
    本来の使い方としては、描画が完了した後にコントロールを追加したり、見た目を変更したりすることを想定されているとは思いますが、今回は別の問題の解決策としてOnApplyTemplateが使えないかと調査をしております。

    やりたいこととしては、Loadedイベント内でイベントを処理したいのですが、Loadedイベント内では他のイベント(INotifyDataErrorInfoのGetErrors等)が処理されない(?私の理解力不足?)ようなので、調査をしているという段階です。

    まずはMainPageのUserControlのOnApplyTemplateは呼ばれないということで理解致しました。

    • 回答としてマーク 2011年3月21日 0:37
    2011年3月21日 0:37