ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

ユーザコントロールから自身のWindowを取得する。それとLoadedイベント

Visual Studio 2010のWPFでアプリを開発中。
Windowにユーザコントロールを設置してあり、そのユーザコントロールのボタンが押された時にWindowのコントロール(ボタンとか)を制御したい。

ユーザコントロールから自身のWindowを取得するのは簡単。

(Window1) win = (Window1)Window.GetWindow(this);

ただ、このコードをユーザコントロールのコンストラクタに書いたらNullReferenseのエラーが発生する。
Loadedイベントとかに置いたらエラーは発生しない。
というわけでxamlにLoadedイベントを作ろう。

Control_MyControl1.xaml

<UserControl x:Class="MyProject1.Control_MyControl1"
                      xmlns="http://schemas.microsoft.com/womfx/2006/xaml/presentation"
                      (略)
                      Loaded="Control_MyControl1_Loaded" > <!-- Loadedを追加 -->

xaml.csにLoadedイベントハンドラを追加する

Control_MyControl1.xaml.cs

using System;
(略)
namespace MyProject1{
   public partial class Control_MyControl1: UserControl
   {
      (略)
      private void Control_MyControl1_Loaded(object sender, RoutedEventArgs e){
         (Window1) win = (Window1)Window.GetWindow(this);  
      }
   }
}

本当にLoadedイベントで良いのか?という疑問は残る。