我有一个 silverlight 应用程序,由几个对话框组成,每个对话框中都有一个 s 集合FrameworkElement
。
是否可以找到框架元素所在的对话框?
我有一个 silverlight 应用程序,由几个对话框组成,每个对话框中都有一个 s 集合FrameworkElement
。
是否可以找到框架元素所在的对话框?
您可以使用VisualTreeHelper
. 下面的代码是我用来Page
在 WPF 应用程序中查找的代码。您可以将 Page 替换为 Silverlight 中所需的任何容器,也许是Popup
.
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
对的,这是可能的。如果您知道控件的结构,那么您可以使用FrameworkElement.GetParent()
,否则您可以使用BFS 或 DFS 等树遍历算法来查找您的框架元素。
http://forums.silverlight.net/p/55369/142519.aspx有一种方法可以简化上述示例代码并使其对通用友好:
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;
}
}
像这样使用它:
var page = myElement.FindParent<Page>();