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

时间:2020-07-22 13:17:03

标签: uwp frame uwp-xaml multi-window

我正在研究UWP库,我想在其中获取CoreWindow或CoreApplicationView内的所有框架或页面。

在多窗口应用中,

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

我想要得到的就是在每个视图中加载的框架和页面。

有人可以帮我吗?

谢谢

Noorul。

1 个答案:

答案 0 :(得分:0)

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