カスタム WPF コントロール内で、含まれている Window または Page を取得したいと考えています。Window.GetWindow() メソッドは、コントロールがウィンドウ アプリにある場合は正常に動作しますが、ブラウザーの XBAP アプリにある場合は、ページではなくブラウザー ウィンドウを返します。
これを行う他の方法はありますか?
カスタム WPF コントロール内で、含まれている Window または Page を取得したいと考えています。Window.GetWindow() メソッドは、コントロールがウィンドウ アプリにある場合は正常に動作しますが、ブラウザーの XBAP アプリにある場合は、ページではなくブラウザー ウィンドウを返します。
これを行う他の方法はありますか?
これは私のために働く:
Window parentWindow = Window.GetWindow(this);
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
VisualTreeHelper クラスを使用して、最上位のコントロールを取得できます。
DependencyObject GetTopLevelControl(DependencyObject control)
{
DependencyObject tmp = control;
DependencyObject parent = null;
while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
{
parent = tmp;
}
return parent;
}