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を追加 -->
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イベントで良いのか?という疑問は残る。