如何在 UWP 应用程序中获取 CoreWindow 内的页面或框架
how to get pages or frames inside CoreWindow in UWP app
我正在开发一个 UWP 库,我想在其中获取 CoreWindow 或 CoreApplicationView 中的所有框架或页面。
在多个 window 应用中,
我可以通过此代码 CoreApplication.Views
获取所有可用的视图。 Views
是 CoreApplicationView
的集合。
从这里我只想得到每个视图中加载的框架和页面。
任何人都可以帮助我。
谢谢
努鲁。
CoreWindow
或 CoreApplicationView
不提供直接访问内部 Xaml 元素的 API。
如果要访问window中的Xaml元素,需要获取Window
对象。目前UWP应用只能获取active window
如果需要获取当前window中的Xaml个元素,需要使用Window.Current
:
public IEnumerable<Frame> GetFrames(Frame rootFrame = null)
{
if (rootFrame == null)
rootFrame = Window.Current.Content as Frame;
if (rootFrame.Content is Page page)
{
var children = VisualTreeFindAll<Frame>(page);
if (children.Count > 0)
{
foreach (var childFrame in children)
{
GetFrames(childFrame);
yield return childFrame;
}
}
}
}
public IList<T> VisualTreeFindAll<T>(DependencyObject element)
where T : DependencyObject
{
List<T> retValues = new List<T>();
var childrenCount = VisualTreeHelper.GetChildrenCount(element);
for (var i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(element, i);
var type = child as T;
if (type != null)
{
retValues.Add(type);
}
retValues.AddRange(VisualTreeFindAll<T>(child));
}
return retValues;
}
用法
var frames = GetFrames();
我正在开发一个 UWP 库,我想在其中获取 CoreWindow 或 CoreApplicationView 中的所有框架或页面。
在多个 window 应用中,
我可以通过此代码 CoreApplication.Views
获取所有可用的视图。 Views
是 CoreApplicationView
的集合。
从这里我只想得到每个视图中加载的框架和页面。
任何人都可以帮助我。
谢谢
努鲁。
CoreWindow
或 CoreApplicationView
不提供直接访问内部 Xaml 元素的 API。
如果要访问window中的Xaml元素,需要获取Window
对象。目前UWP应用只能获取active window
如果需要获取当前window中的Xaml个元素,需要使用Window.Current
:
public IEnumerable<Frame> GetFrames(Frame rootFrame = null)
{
if (rootFrame == null)
rootFrame = Window.Current.Content as Frame;
if (rootFrame.Content is Page page)
{
var children = VisualTreeFindAll<Frame>(page);
if (children.Count > 0)
{
foreach (var childFrame in children)
{
GetFrames(childFrame);
yield return childFrame;
}
}
}
}
public IList<T> VisualTreeFindAll<T>(DependencyObject element)
where T : DependencyObject
{
List<T> retValues = new List<T>();
var childrenCount = VisualTreeHelper.GetChildrenCount(element);
for (var i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(element, i);
var type = child as T;
if (type != null)
{
retValues.Add(type);
}
retValues.AddRange(VisualTreeFindAll<T>(child));
}
return retValues;
}
用法
var frames = GetFrames();