Page.KeepAlive 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示是否在导航历史记录中保留 Page 实例。
public:
property bool KeepAlive { bool get(); void set(bool value); };
public bool KeepAlive { get; set; }
member this.KeepAlive : bool with get, set
Public Property KeepAlive As Boolean
属性值
如果在导航历史记录中保留 Page 实例,则为 true
;否则为 false
。 默认值为 false
。
示例
以下示例演示如何使用 XAML 跨多个导航保留 类的 Page 实例。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="HomePage"
KeepAlive="True"
>
</Page>
<Page x:Class="CSharp.HomePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="HomePage"
>
</Page>
using System;
using System.Windows;
using System.Windows.Controls;
namespace CSharp
{
public partial class HomePage : Page
{
public HomePage()
{
InitializeComponent();
// Keep this page in navigation history
this.KeepAlive = true;
}
}
}
Imports System.Windows
Imports System.Windows.Controls
Namespace VisualBasic
Partial Public Class HomePage
Inherits Page
Public Sub New()
InitializeComponent()
' Keep this page in navigation history
Me.KeepAlive = True
End Sub
End Class
End Namespace
注解
当页面首次导航到时,将创建 类的新实例 Page 。 当页面从 (向后或向前导航) 时,页面的条目将添加到导航历史记录中。 默认情况下,条目不引用页面对象。 相反,该条目包含页面的 uri) (包统一资源标识符。 使用导航历史记录导航到页面的条目时,将使用包 URI 创建页面的新实例。 此行为是默认行为,以避免过度使用内存:保留页实例可能会快速消耗内存,尤其是那些具有非平凡内容量的实例。 由于可以存储在导航历史记录的后向堆栈和前向堆栈中的条目数没有限制,因此增加了此问题。 相比之下,存储页面的包 URI 几乎不会影响内存消耗。
创建新页面实例的主要副作用是,从页面的一个实例到另一个实例,不会记住页面状态。 在这些情况下,Windows Presentation Foundation提供了多种用于记住状态的技术。
若要使页面保持活动状态,请将 属性设置为 KeepAlivetrue
(默认值为 false
) 。
注意
仅使用代码 ((例如调用 Navigate) )实例化并导航到的页面会自动保持活动状态。
KeepAlive
true
除非需要:
- 当页面包含大量内容时,可能需要很长时间才能实例化。 如果页面未保持活动状态,并且经常导航到该页面,则不断实例化页面的成本可能会对用户体验产生负面影响。 但是,从性能的角度来看,应依赖于默认设置并分析应用程序的性能;如果测试发现页面的加载时间低于应用程序所需的范围,则配置页面以保持活动状态可能是解决问题的一种方法。
注意
如果用户 (XBAP) ,则保持活动状态的页面不会保留在 XAML 浏览器应用程序的导航历史记录中, (XBAP) 。 导航历史记录中仅保留未保持活动状态的页面的日记条目。
依赖项属性信息
标识符字段 | KeepAliveProperty |
元数据属性设置为 true |
无 |
注意
此依赖属性上的元数据类型为 PropertyMetadata,而不是 FrameworkPropertyMetadata。