私はいくつかのダイアログからなる銀色のアプリを持っていて、それぞれにFrameworkElement
のコレクションがあります。Silverlight FrameworkElementが存在するダイアログを見つけるには?
Framework要素が含まれているダイアログを見つけることはできますか?
私はいくつかのダイアログからなる銀色のアプリを持っていて、それぞれにFrameworkElement
のコレクションがあります。Silverlight FrameworkElementが存在するダイアログを見つけるには?
Framework要素が含まれているダイアログを見つけることはできますか?
VisualTreeHelper
を使用できます。以下のコードは、WPFアプリケーションでPage
を見つけるために使用しているコードです。 PageをSilverlightで必要なコンテナ(おそらくPopup
)に置き換えることができます。
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
http://forums.silverlight.net/p/55369/142519.aspx上記の例のコードを簡素化し、それが一般的なフレンドリーにする方法があります:はい、それは可能である
var page = myElement.FindParent<Page>();
:
public static class ControlFinder
{
public static T FindParent<T>(this UIElement control) where T: UIElement
{
UIElement p = VisualTreeHelper.GetParent(control) as UIElement;
if (p != null)
{
if (p is T)
return p as T;
else
return ControlFinder.FindParent<T>(p);
}
return null;
}
}
は次のようにそれを使用してください。あなたのコントロールの構造を知っているなら、ユーザFrameworkElement.GetParent()
、あるいはBFSやDFSのようなTree-traversal algorithmsを使ってあなたのフレームワーク要素を見つけることができます。