我正在研究UWP库,我想在其中获取CoreWindow或CoreApplicationView内的所有框架或页面。
在多窗口应用中,
我可以通过此代码CoreApplication.Views
获得所有可用的视图。 Views
是CoreApplicationView
的集合。
我想要得到的就是在每个视图中加载的框架和页面。
有人可以帮我吗?
谢谢
Noorul。
答案 0 :(得分:0)
CoreWindow
或CoreApplicationView
不提供直接访问内部Xaml元素的API。
如果要访问窗口中的Xaml元素,则需要获取Window
对象。当前,UWP应用程序只能获取活动窗口
如果需要在当前窗口中获取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();