Frame
框架是一种支持导航的内容控件。
Frame 提供导航到和显示内容的功能的内容控件。 Frame 与其他控件和元素一样,可在其他内容中托管。
当 Frame 控件导航到 HTML 内容时, Frame 控件在内部实例化本机 WebBrowser ActiveX 控件。 WPF 通过将功能控件应用于 WebBrowser ActiveX 控件来启用安全功能。 应用的功能控件在 Xbap 和独立应用程序方面有所不同。 某些应用程序应该应用其他功能控制,以防止恶意内容运行。 有关详细信息,请参阅 Security (WPF) 和 WebBrowser 控件概述和教程中的 "WebBrowser 控件和功能控件" 一节。
内容可以是任何类型的 .NET Framework 对象和 HTML 文件。 但一般情况下,页面是打包内容以进行导航的首选方式 (参阅 Page) 。
可以通过将属性设置为 Source 所需内容的 URI 来导航至内容。 此外,还可以使用方法的以下重载之一导航到内容 Navigate :
当内容通过 URI 导航到时,将 Frame 返回包含内容的对象。 或者,可以通过使用接受对象的方法重载之一来导航到内容 Navigate :
导航的生存期可通过以下事件进行跟踪:
- Navigating
- Navigated
- NavigationProgress
- NavigationFailed
- NavigationStopped
- LoadCompleted
- FragmentNavigation
并非每次发生导航时都会引发所有事件;引发的事件集由 (内容或内容片段) 的导航类型确定,以及导航如何完成 (取消、停止或失败) 。
下图说明了这些事件将激发的顺序:
在导航过程中或导航后, Frame 提供有关要导航到的内容的信息,包括要导航到的内容的 uri (Source) 、当前内容 () 的 uri CurrentSource 以及包含导航到 () 的内容的对象 Content 。
导航到内容时,会 Frame 将导航记录为导航历史记录中的条目。 当出现新的导航时,通过调用 Navigate 方法或通过在前进导航历史记录中通过调用导航到某个条目来向后导航历史记录中添加一个条目 GoForward 。 通过在后退导航历史记录中通过调用来向后导航历史记录中添加一个条目 GoBack 。 CanGoBack 和 CanGoForward 报告后退和前进导航历史记录中是否存在条目。
第一次从另一段内容导航到一个内容时,将 Frame 自动显示允许用户在导航历史记录中向后和向前导航的导航用户界面。 可以通过设置属性来配置显示导航 UI 的时间 NavigationUIVisibility 。
默认情况下, Frame 仅当父导航器 (时 NavigationWindow , Frame 找不到具有其自己的导航历史记录的) 的导航历史记录。 这意味着,框架的导航历史记录项与父导航器的导航历史记录项从不。 若要指定 Frame 管理自己的导航历史记录,请将 JournalOwnership 属性设置为 OwnsJournal 。
后退导航历史记录中的最新条目可通过调用删除 RemoveBackEntry 。
Frame 不会在导航历史记录中存储内容对象的实例。 相反, Frame 每次使用导航历史记录导航到内容对象时,都将创建该对象的新实例。 此行为旨在避免在将大量内容导航到时消耗过多的内存。 因此,不会从一个导航到下一个导航来记住内容的状态。 不过,WPF 提供了多种方法,你可以通过这些方法在导航历史记录中存储部分内容的状态。
使用 AddBackEntry ,还可以记住单个页面实例的多个状态集。
若要对多个控件应用相同的属性设置 Frame ,请使用 Style 属性。 您可以修改默认值 ControlTemplate ,为控件指定独特的外观。 有关创建的详细信息 ControlTemplate ,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于的部分和状态,请 Frame 参阅 框架样式和模板。
此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。
只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。
字段
名称 | 备注 | 权限 |
SchemeDelimiter | 指定将通讯协议方案同 URI 的地址部分分开的字符 | public |
UriSchemeFile | 指定 URI 是指向文件的指针 | public |
UriSchemeFtp | 指定通过文件传输协议 (FTP) 访问 URI | public |
UriSchemeGopher | 指定通过 Gopher 协议访问 URI | public |
UriSchemeHttp | 指定通过超文本传输协议 (HTTP) 访问 URI | public |
UriSchemeHttps | 指定通过安全超文本传输协议 (HTTPS) 访问 UR | public |
UriSchemeMailto | 指定 URI 是一个电子邮件地址,需通过简单邮件传输协议 (SMTP) 访问 | public |
UriSchemeNetPipe | 指明通过 Windows Communication Foundation (WCF) 使用的 NetPipe 方案访问该 URI | public |
UriSchemeNetTcp | 指明通过 Windows Communication Foundation (WCF) 使用的 NetTcp 方案访问该 URI | public |
UriSchemeNews | 指定 URI 是 Internet 新闻组,而且可以通过 Network 新闻传输协议 (NNTP) 进行访问 | public |
UriSchemeNntp | 指定 URI 是 Internet 新闻组,而且可以通过 Network 新闻传输协议 (NNTP) 进行访问 | public |
属性
名称 | 备注 | 权限 |
AbsolutePath | 获取 URI 的绝对路径 | public |
AbsoluteUri | 获取绝对 URI | public |
Authority | 获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号 | public |
DnsSafeHost | 获得可安全用于 DNS 解析的未转义主机名(如必要) | public |
Fragment | 获取转义 URI 片段 | public |
Host | 获取此实例的主机部分 | public |
HostNameType | 获取 URI 中指定的主机名的类型 | public |
IdnHost | 根据需要使用 Punycode,获取主机的符合 RFC 3490 标准的国际域名。 该字符串在不进行转义的情况下(如必要)可安全用于 DNS 解析 | public |
IsAbsoluteUri | 获取一个值,该值指示 Uri 实例是否为绝对实例 | public |
IsDefaultPort | 获取一个值,该值指示 URI 的端口值是否为此方案的默认值 | public |
IsFile | 获取一个值,该值指示指定的 Uri 是否为文件 URI | public |
IsLoopback | 获取一个值,该值指示指定的 Uri 是否引用本地主机 | public |
IsUnc | 获取一个值,该值指示指定的 Uri 是否为统一命名约定 (UNC) 路径 | public |
LocalPath | 获取文件名的本地操作系统表示形式 | public |
OriginalString | 获取传递给 Uri 构造函数的原始 URI 字符串 | public |
PathAndQuery | 获取用问号 (?) 分隔的 AbsolutePath 和 Query 属性 | public |
Port | 获取此 URI 的端口号 | public |
Query | 获取指定 URI 中包括的任何查询信息 | public |
Scheme | 获取此 URI 的方案名称 | public |
Segments | 获取包含构成指定 URI 的路径段的数组 | public |
UserEscaped | 获取一个值,该值指示 URI 字符串是否在创建 Uri 实例之前已被完全转义 | public |
UserInfo | 获取用户名、密码或其他与指定 URI 关联的特定于用户的信息 | public |
方法
名称 | 备注 | 权限 |
Canonicalize | 将内部存储的 URI 转换为规范化格式 | protected |
CheckHostName | 确定指定的主机名是否为有效的 DNS 名称 | public |
CheckSchemeName | 确定指定的方案名是否有效 | public |
CheckSecurity | 调用此方法不起任何作用 | protected |
Compare | 使用指定的比较规则比较两个 URI 的指定部分 | public |
Equals | 比较两个 Uri 实例是否相等 | public |
Escape | 将路径部分中的任何不安全字符或保留字符转换为对应的十六进制字符表示形式 | protected |
EscapeDataString | 将字符串转换为它的转义表示形式 | public |
EscapeString | 将字符串转换为它的转义表示形式 | protected |
EscapeUriString | 将 URI 字符串转换为它的转义表示形式 | public |
FromHex | 获取十六进制数字的十进制值 | public |
GetComponents | 使用特殊字符的指定转义,获取当前实例的指定部分 | public |
GetHashCode | 获取 URI 的哈希代码 | public |
GetLeftPart | 获取 Uri 实例的指定部分 | public |
GetObjectData | 返回序列化当前实例所需的数据 | protected |
HexEscape | 将指定的字符转换为它的等效十六进制字符 | public |
HexUnescape | 将字符的指定十六进制表示形式转换为字符 | public |
IsBadFileSystemCharacter | 指示字符是否在文件系统名称中无效 | protected |
IsBaseOf | public | |
IsExcludedCharacter | 确定是否应转义指定的字符 | protected |
IsHexDigit | 确定指定的字符是否为有效的十六进制数字 | public |
IsHexEncoding | 确定字符串中的一个字符是否为十六进制编码 | public |
IsReservedCharacter | 确定指定的字符是否为保留字符 | protected |
IsWellFormedOriginalString | 指示用于构造此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义 | public |
IsWellFormedUriString | 通过尝试用字符串构造一个 URI 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义 | public |
MakeRelative | 确定两个 Uri 实例之间的差异 | public |
MakeRelativeUri | 确定两个 Uri 实例之间的差异 | public |
Parse | 分析当前实例的 URI 以确保它包含有效 URI 所需的所有部分 | protected |
ToString | 获取指定的 Uri 实例的规范化字符串表示形式 | public |
TryCreate | public | |
Unescape | 转换指定的字符串,方法是将任何转义序列替换为相应的未转义表示形式 | protected |
UnescapeDataString | 将字符串转换为它的非转义表示形式 | public |
运算
名称 | 备注 | 权限 |
确定两个 Uri 实例是否具有相同的值 | public | |
确定两个 Uri 实例是否具有不同的值 | public |
接口
名称 | 备注 | 权限 |
ISerializable.GetObjectData | 返回序列化当前实例所需的数据 | void |
XAML范例
<Window x:Class="FrameDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FrameDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Frame Name="islandFrame" JournalOwnership="OwnsJournal"Source="https://www.microsoft.com/zh-cn/" />
</Window>