NavigationView 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示一个容器,该容器允许对应用内容进行导航。 它有一个标头、一个针对主内容的视图,以及一个用于导航命令的菜单窗格。
适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Controls.NavigationView (,请参阅 ) Windows 应用 SDK命名空间。
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 327680)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[WebHostHidden]
class NavigationView : ContentControl
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 327680)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class NavigationView : ContentControl
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 327680)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class NavigationView : ContentControl
function NavigationView()
Public Class NavigationView
Inherits ContentControl
<NavigationView .../>
- 继承
-
Object IInspectable DependencyObject UIElement FrameworkElement Control ContentControl NavigationView
- 属性
Windows 要求
设备系列 |
Windows 10 Fall Creators Update (在 10.0.16299.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v5.0 中引入)
|
示例
提示
有关详细信息、设计指南和代码示例,请参阅 导航视图。
WinUI 2 库应用包括大多数 WinUI 2 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码。
注解
内置元素的访问键
若要为 NavigationView 内置的 后退箭头 和 设置 按钮添加访问键,必须使用 VisualTreeHelper 获取对这些控件的引用,然后在代码中设置属性。
此示例演示如何处理 Loaded 事件以查找可视化树中的元素并设置 AccessKey 和 KeyTipPlacementMode 属性。 NavigationView 可视化树因运行的版本而异,因此 ApiInformation.IsApiContractPresent 方法用于在运行时确定版本,然后运行相应的代码来导航可视化树并查找 back 和 settings 元素。
private void NavigationView_Loaded(object sender, RoutedEventArgs e)
{
var navView = sender as NavigationView;
var rootGrid = VisualTreeHelper.GetChild(navView, 0) as Grid;
// SDK 18362 (1903)
// SDK 17763 (1809)
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 7))
{
// Find the back button.
var paneToggleButtonGrid = VisualTreeHelper.GetChild(rootGrid, 0) as Grid;
var buttonHolderGrid = VisualTreeHelper.GetChild(paneToggleButtonGrid, 1) as Grid;
var navigationViewBackButton = VisualTreeHelper.GetChild(buttonHolderGrid, 0) as Button;
navigationViewBackButton.AccessKey = "A";
if (navView.PaneDisplayMode == NavigationViewPaneDisplayMode.Top)
{
// Set back button key tip placement mode.
navigationViewBackButton.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Bottom;
// Find the settings item and set properties.
var grid = VisualTreeHelper.GetChild(rootGrid, 1) as Grid;
var topNavArea = VisualTreeHelper.GetChild(grid, 0) as StackPanel;
var topNavGrid = VisualTreeHelper.GetChild(topNavArea, 1) as Grid;
var settingsTopNavPaneItem = VisualTreeHelper.GetChild(topNavGrid, 7) as NavigationViewItem;
settingsTopNavPaneItem.AccessKey = "S";
settingsTopNavPaneItem.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Bottom;
}
else
{
// Set back button key tip placement mode.
navigationViewBackButton.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Right;
// Find the settings item and set properties.
var grid = VisualTreeHelper.GetChild(rootGrid, 1) as Grid;
var rootSplitView = VisualTreeHelper.GetChild(grid, 1) as SplitView;
var grid2 = VisualTreeHelper.GetChild(rootSplitView, 0) as Grid;
var paneRoot = VisualTreeHelper.GetChild(grid2, 0) as Grid;
var border = VisualTreeHelper.GetChild(paneRoot, 0) as Border;
var paneContentGrid = VisualTreeHelper.GetChild(border, 0) as Grid;
var settingsNavPaneItem = VisualTreeHelper.GetChild(paneContentGrid, 6) as NavigationViewItem;
settingsNavPaneItem.AccessKey = "S";
settingsNavPaneItem.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Right;
}
}
// SDK 17134 (1803)
else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 6))
{
// Find the back button and set properties.
var paneToggleButtonGrid = VisualTreeHelper.GetChild(rootGrid, 0) as Grid;
var buttonHolderGrid = VisualTreeHelper.GetChild(paneToggleButtonGrid, 1) as Grid;
var navigationViewBackButton = VisualTreeHelper.GetChild(buttonHolderGrid, 0) as Button;
navigationViewBackButton.AccessKey = "A";
navigationViewBackButton.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Right;
// Find the settings item and set properties.
var rootSplitView = VisualTreeHelper.GetChild(rootGrid, 1) as SplitView;
var grid = VisualTreeHelper.GetChild(rootSplitView, 0) as Grid;
var paneRoot = VisualTreeHelper.GetChild(grid, 0) as Grid;
var border = VisualTreeHelper.GetChild(paneRoot, 0) as Border;
var paneContentGrid = VisualTreeHelper.GetChild(border, 0) as Grid;
var settingsNavPaneItem = VisualTreeHelper.GetChild(paneContentGrid, 5) as NavigationViewItem;
settingsNavPaneItem.AccessKey = "S";
settingsNavPaneItem.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Right;
}
// SDK 16299 (Fall Creator's Update)
else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
// Find the settings item and set properties.
var rootSplitView = VisualTreeHelper.GetChild(rootGrid, 1) as SplitView;
var grid = VisualTreeHelper.GetChild(rootSplitView, 0) as Grid;
var paneRoot = VisualTreeHelper.GetChild(grid, 0) as Grid;
var border = VisualTreeHelper.GetChild(paneRoot, 0) as Border;
var paneContentGrid = VisualTreeHelper.GetChild(border, 0) as Grid;
var settingsNavPaneItem = VisualTreeHelper.GetChild(paneContentGrid, 4) as NavigationViewItem;
settingsNavPaneItem.AccessKey = "S";
settingsNavPaneItem.KeyTipPlacementMode = Windows.UI.Xaml.Input.KeyTipPlacementMode.Right;
}
}
控件样式和模板
可以修改默认 的 Style 和 ControlTemplate ,使控件具有唯一的外观。 有关修改控件样式和模板的信息,请参阅 设置控件样式。 文件中包括 generic.xaml
定义控件外观的默认样式、模板和资源。 出于设计目的, generic.xaml
通过 SDK 或 NuGet 包安装在本地提供。
- 建议) (WinUI 样式: 使用 Microsoft.UI.Xaml.Controls.NavigationView。
-
非 WinUI 样式: 有关内置样式,请参阅
%ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml
。
如果自定义安装,位置可能会有所不同。 不同版本的 SDK 的样式和资源可能具有不同的值。
XAML 还包括可用于在不修改控件模板的情况下修改不同视觉状态下控件颜色的资源。 修改这些资源优先于设置 背景 和 前台等属性。 有关详细信息,请参阅 XAML 样式一文的轻量级样式部分。 从 Windows 10 版本 1607 (SDK 14393) 开始提供轻量级样式资源。
版本历史记录
Windows 版本 | SDK 版本 | 已添加值 |
---|---|---|
1803 | 17134 | BackRequested |
1803 | 17134 | IsBackButtonVisible |
1803 | 17134 | IsBackEnabled |
1803 | 17134 | PaneClosed |
1803 | 17134 | PaneClosing |
1803 | 17134 | PaneOpened |
1803 | 17134 | PaneOpening |
1803 | 17134 | PaneTitle |
1809 | 17763 | ContentOverlay |
1809 | 17763 | IsPaneVisible |
1809 | 17763 | OverflowLabelMode |
1809 | 17763 | PaneCustomContent |
1809 | 17763 | PaneDisplayMode |
1809 | 17763 | PaneHeader |
1809 | 17763 | SelectionFollowsFocus |
1809 | 17763 | ShoulderNavigationEnabled |
1809 | 17763 | TemplateSettings |
构造函数
NavigationView() |
初始化 NavigationView 类的新实例。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中适用于 WinUI 的 Microsoft.UI.Xaml.Controls.NavigationView.-ctor (,请参阅) Windows 应用 SDK命名空间。 |
属性
方法
事件
AccessKeyDisplayDismissed |
在不应再显示访问密钥时发生。 (继承自 UIElement) |
AccessKeyDisplayRequested |
当用户请求显示访问密钥时发生。 (继承自 UIElement) |
AccessKeyInvoked |
当用户完成访问密钥序列时发生。 (继承自 UIElement) |
ActualThemeChanged |
在 ActualTheme 属性值更改时发生。 (继承自 FrameworkElement) |
BackRequested |
当后退按钮收到交互(如单击或点击)时发生。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中适用于 WinUI 的 Microsoft.UI.Xaml.Controls.NavigationView.BackRequested (,请参阅Windows 应用 SDK命名空间) 。 |
BringIntoViewRequested |
在此元素或其后代之一上调用 StartBringIntoView 时发生。 (继承自 UIElement) |
CharacterReceived |
输入队列接收到单个组合字符时发生。 (继承自 UIElement) |
ContextCanceled |
当上下文输入手势继续转换为操作手势时发生,以通知元素不应打开上下文浮出控件。 (继承自 UIElement) |
ContextRequested |
当用户完成上下文输入手势(例如右键单击)时发生。 (继承自 UIElement) |
DataContextChanged |
在 FrameworkElement.DataContext 属性的值更改时发生。 (继承自 FrameworkElement) |
DisplayModeChanged |
在 DisplayMode 属性更改时发生。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中适用于 WinUI 的 Microsoft.UI.Xaml.Controls.NavigationView.DisplayModeChang (ed,请参阅Windows 应用 SDK命名空间) 。 |
DoubleTapped |
当此元素的命中测试区域发生其他未经处理的 DoubleTap 交互时发生。 (继承自 UIElement) |
DragEnter |
当输入系统报告具有此元素作为目标的基础拖动事件时发生。 (继承自 UIElement) |
DragLeave |
当输入系统报告具有此元素作为原点的基础拖动事件时发生。 (继承自 UIElement) |
DragOver |
在输入系统报告出现以此元素为可能放置目标的基础拖动事件时发生。 (继承自 UIElement) |
DragStarting |
在启动拖动操作时发生。 (继承自 UIElement) |
Drop |
在输入系统报告出现将此元素作为放置目标的基础放置事件时发生。 (继承自 UIElement) |
DropCompleted |
结束此元素作为源的拖放操作时发生。 (继承自 UIElement) |
EffectiveViewportChanged |
在 FrameworkElement的有效视区 更改时发生。 (继承自 FrameworkElement) |
FocusDisengaged |
当焦点从游戏板/远程交互) 的控制边界释放 (时发生。 (继承自 Control) |
FocusEngaged |
当焦点在游戏板/远程交互) (控件边界内受限时发生。 (继承自 Control) |
GettingFocus |
在 UIElement 接收焦点之前发生。 此事件是同步引发的,以确保在事件冒泡时不会移动焦点。 (继承自 UIElement) |
GotFocus |
在 UIElement 收到焦点时发生。 此事件是异步引发的,因此焦点可以在浮升完成之前再次移动。 (继承自 UIElement) |
Holding |
当此元素的命中测试区域发生其他未处理的 保持 交互时发生。 (继承自 UIElement) |
IsEnabledChanged |
在 IsEnabled 属性更改时发生。 (继承自 Control) |
ItemInvoked |
当菜单中的项收到交互(如单击或点击)时发生。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中适用于 WinUI 的 Microsoft.UI.Xaml.Controls.NavigationView.ItemInvoked (,请参阅Windows 应用 SDK命名空间) 。 |
KeyDown |
在 UIElement 具有焦点时按下键盘键时发生。 (继承自 UIElement) |
KeyUp |
在 UIElement 具有焦点时释放键盘键时发生。 (继承自 UIElement) |
LayoutUpdated |
当可视化树的布局更改时发生,因为布局相关的属性更改值或刷新布局的其他操作。 (继承自 FrameworkElement) |
Loaded |
在已构造 FrameworkElement 并将其添加到对象树中并准备好交互时发生。 (继承自 FrameworkElement) |
Loading |
在开始加载 FrameworkElement 时发生。 (继承自 FrameworkElement) |
LosingFocus |
在 UIElement 失去焦点之前发生。 此事件是同步引发的,以确保在事件冒泡时不会移动焦点。 (继承自 UIElement) |
LostFocus |
当 UIElement 失去焦点时发生。 此事件以异步方式引发,因此焦点可以在冒泡完成之前再次移动。 (继承自 UIElement) |
ManipulationCompleted |
在 UIElement 上的操作完成时发生。 (继承自 UIElement) |
ManipulationDelta |
当输入设备在操作期间更改位置时发生。 (继承自 UIElement) |
ManipulationInertiaStarting |
在输入设备在操作期间与 UIElement 对象失去联系和延迟开始时发生。 (继承自 UIElement) |
ManipulationStarted |
在输入设备在 UIElement 上开始操作时发生。 (继承自 UIElement) |
ManipulationStarting |
在首次创建操作处理器时发生。 (继承自 UIElement) |
NoFocusCandidateFound |
当用户尝试通过制表键或方向箭头 (移动焦点) ,但焦点不会移动时发生,因为移动方向上找不到焦点候选项。 (继承自 UIElement) |
PaneClosed |
关闭 NavigationView 窗格时发生。 适用于 UWP 的等效 WinUI 2 API:Microsoft.UI.Xaml.Controls.NavigationView.PaneClosed (in the Windows 应用 SDK,请参阅Windows 应用 SDK命名空间) 。 |
PaneClosing |
当 NavigationView 窗格关闭时发生。 适用于 UWP 的等效 WinUI 2 API:Microsoft.UI.Xaml.Controls.NavigationView.Pane 在Windows 应用 SDK中丢失 WinUI 的 (,请参阅 ) Windows 应用 SDK命名空间。 |
PaneOpened |
打开 NavigationView 窗格时发生。 适用于 UWP 的等效 WinUI 2 API:Microsoft.UI.Xaml.Controls.NavigationView.Pane 打开Windows 应用 SDK中 WinUI 的 (,请参阅Windows 应用 SDK命名空间) 。 |
PaneOpening |
当 NavigationView 窗格打开时发生。 等效的适用于 UWP 的 WinUI 2 API:Microsoft.UI.Xaml.Controls.NavigationView.Pane 打开Windows 应用 SDK中 WinUI 的 (,请参阅Windows 应用 SDK命名空间) 。 |
PointerCanceled |
当进行接触的指针异常失去接触时发生。 (继承自 UIElement) |
PointerCaptureLost |
当此元素以前持有的指针捕获移动到另一个元素或其他位置时发生。 (继承自 UIElement) |
PointerEntered |
当指针进入此元素的命中测试区域时发生。 (继承自 UIElement) |
PointerExited |
当指针离开此元素的命中测试区域时发生。 (继承自 UIElement) |
PointerMoved |
当指针在指针停留在此元素的命中测试区域内时移动时发生。 (继承自 UIElement) |
PointerPressed |
当指针设备在此元素中启动 Press 操作时发生。 (继承自 UIElement) |
PointerReleased |
在释放之前启动 按下 操作的指针设备时发生,同时在此元素中。 请注意, 不保证按下 操作的结尾会触发 PointerReleased 事件;可能会触发其他事件。 有关详细信息,请参阅备注。 (继承自 UIElement) |
PointerWheelChanged |
在指针滚轮的增量值更改时发生。 (继承自 UIElement) |
PreviewKeyDown |
当 UIElement 具有焦点时按下键盘键时发生。 (继承自 UIElement) |
PreviewKeyUp |
在 UIElement 具有焦点时释放键盘键时发生。 (继承自 UIElement) |
ProcessKeyboardAccelerators |
按下 键盘快捷方式 (或快捷键) 时发生。 (继承自 UIElement) |
RightTapped |
当指针位于 元素上时发生右点击输入刺激时发生。 (继承自 UIElement) |
SelectionChanged |
在当前所选项更改时发生。 等效的适用于 UWP 的 WinUI 2 API:Microsoft.UI.Xaml.Controls.NavigationView.SelectionchangedWindows 应用 SDK中的 WinUI (,请参阅Windows 应用 SDK命名空间) 。 |
SizeChanged |
当 ActualHeight 或 ActualWidth 属性更改 FrameworkElement 上的值时发生。 (继承自 FrameworkElement) |
Tapped |
在此元素的命中测试区域上发生未经处理的 点击 交互时发生。 (继承自 UIElement) |
Unloaded |
当此对象不再连接到main对象树时发生。 (继承自 FrameworkElement) |