如何在 UWP 应用程序中获取 CoreWindow 内的页面或框架

how to get pages or frames inside CoreWindow in UWP app

我正在开发一个 UWP 库,我想在其中获取 CoreWindow 或 CoreApplicationView 中的所有框架或页面。

在多个 window 应用中,

我可以通过此代码 CoreApplication.Views 获取所有可用的视图。 ViewsCoreApplicationView 的集合。

从这里我只想得到每个视图中加载的框架和页面。

任何人都可以帮助我。

谢谢

努鲁。

CoreWindowCoreApplicationView 不提供直接访问内部 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();