You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定Frame内容?MyFrame.Navigate设置后获取当前Page方法

获取Frame当前显示页面信息的方法

嘿,这个需求其实很容易实现,我来给你几个实用的方案,用来做地址栏功能完全够用:

1. 直接读取Frame的Content属性

Frame的Content属性就是当前正在显示的页面实例,你可以直接获取它然后提取需要的信息:

// 获取当前页面实例
var currentPage = MyFrame.Content as Page;
if (currentPage != null)
{
    // 获取页面的类型名称(比如"Page2",适合作为简单地址显示)
    string pageName = currentPage.GetType().Name;
    
    // 如果你的页面有自定义标题属性(比如给Page加了Title),可以直接用
    // string pageTitle = currentPage.Title;
    
    // 把这个值赋值给你的地址栏控件即可
    YourAddressBarControl.Text = $"/{pageName}";
}

注意一定要做null检查,因为Frame初始化后还没导航任何页面时,Content会是null,避免空引用异常。

2. 监听Navigated事件实时更新地址栏

如果希望地址栏能在每次导航完成后自动更新,监听Frame的Navigated事件是更优雅的方式:

// 在初始化代码里绑定事件(比如窗口构造函数中)
MyFrame.Navigated += MyFrame_Navigated;

// 事件处理方法
private void MyFrame_Navigated(object sender, NavigationEventArgs e)
{
    var frame = sender as Frame;
    if (frame != null && e.Content is Page currentPage)
    {
        // 这里可以根据需求自定义地址格式
        YourAddressBarControl.Text = $"当前页面: {currentPage.GetType().Name}";
        // 或者模拟URL风格:"/Pages/{currentPage.GetType().Name}"
    }
}

这个方法的好处是不用手动每次去获取,只要页面导航完成就自动更新地址栏。

3. 自定义页面基类实现更灵活的地址

如果想要更友好的地址(比如类似/Home/用户列表这种),可以创建一个自定义的Page基类,给每个页面添加专属的地址属性:

// 自定义基类
public class BasePage : Page
{
    // 用来存储页面的自定义地址
    public string PageAddress { get; set; }
}

// 你的Page2继承这个基类,并设置地址
public partial class Page2 : BasePage
{
    public Page2()
    {
        InitializeComponent();
        PageAddress = "/Home/Page2"; // 自定义你想要的地址格式
    }
}

之后获取地址的时候就可以直接读取这个属性:

var currentBasePage = MyFrame.Content as BasePage;
if (currentBasePage != null)
{
    YourAddressBarControl.Text = currentBasePage.PageAddress;
}

这种方式扩展性很强,你可以根据业务需求给每个页面设置不同的地址文本,完全满足地址栏的展示需求。

内容的提问来源于stack exchange,提问作者user7342089

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:17:39