[UWP开发]NavigationView基础使用方法
原文:[UWP开发]NavigationView基础使用方法

[UWP开发]NavigationView基础使用方法

NavigationView是秋季创意者更新(16299)引入的新控件,用于生成Windows特色的导航栏。
可参考说明文档(目前只有英文)
给了一段示例代码,和运行截图,贴在下面:

<NavigationView x:Name="nvAll" IsSettingsVisible="true" IsTabStop="False" Header="This is header text." ItemInvoked="nvAll_ItemInvoked"><NavigationView.MenuItems><NavigationViewItemHeader Content="Main"/><NavigationViewItem Icon="Play"  Content="Menu Item1" Tag="SamplePage1" ToolTipService.ToolTip="1"/><NavigationViewItemSeparator/><NavigationViewItem Icon="Save" Content="Menu Item2" Tag="SamplePage2" /><NavigationViewItem Icon="Refresh" Content="Menu Item3" Tag="SamplePage3" /></NavigationView.MenuItems><NavigationView.AutoSuggestBox><AutoSuggestBox x:Name="ASB" PlaceholderText="Search" QueryIcon="Find" TextChanged="AutoSuggestBox_TextChanged" QuerySubmitted="AutoSuggestBox_QuerySubmitted" SuggestionChosen="AutoSuggestBox_SuggestionChosen"/></NavigationView.AutoSuggestBox><NavigationView.PaneFooter><HyperlinkButton x:Name="MoreInfoBtn" Content="More" Click="More_Click" Margin="12,0"/></NavigationView.PaneFooter><Frame x:Name="contentFrame"></Frame>
</NavigationView>

代码简单,效果也是非常好的,包含了主推的亚克力材料和光线的设置,以后就不需要Toolkit或者自己定义样式了。
接下来针对这个控件,探讨更多的使用方法。

简单说下其中用到的类
NavigationViewItem 用于导航项,包含图标,文字等。

<NavigationViewItem Icon="Play"  Content="Menu Item1" />

NavigationViewItemSeparator 用于Item之间的间隔站位

<NavigationViewItemSeparator/>

NavigationViewItemHeader 字号稍大的纯文字标签,通常用于表示Item归属类别

<NavigationViewItemHeader Content="Main"/>

AutoSuggestBox 可选部分,一个用于搜索的输入框

<NavigationView.AutoSuggestBox>
<AutoSuggestBox x:Name="ASB" PlaceholderText="Search" QueryIcon="Find" TextChanged="AutoSuggestBox_TextChanged" QuerySubmitted="AutoSuggestBox_QuerySubmitted" SuggestionChosen="AutoSuggestBox_SuggestionChosen"/>
</NavigationView.AutoSuggestBox>

在后面详细说明用法。

IsSettingsVisible
是否显示设置栏,设置在最下方

<NavigationView IsSettingsVisible="true" .../>

PaneFooter
位于导航栏最下方区域(但在设置上方)的自定义区域。

<NavigationView.PaneFooter>
...
</NavigationView.PaneFooter>

1 . AutoSuggestBox
AutoSuggestBox 是一个输入框,具有提示输入的功能。在导航中通常用于搜索功能。
要完整使用这一控件,需要处理以下3个事件。
TextChanged
当用户输入的信息发生变化时,从输入关键词提示列表中。选出满足输入信息为关键词子串的提示字符串,并交给AutoSuggestBox显示提示信息。

private List<string> ReminderStrList;
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput){sender.ItemsSource = ReminderStrList.Where(i => i.Contains(sender.Text));}
}


Suggestion chosen
当用户选择提示框中的某一项时,将该项对应的文字交给AutoSuggestBox显示提示信息。如需要显示到输入框中的内容与提示框中选择的那一项的文字一致,可不写此方法。当文字不同时,可用此方法将对应文字更新到输入框。

private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
{sender.Text = args.SelectedItem.ToString();
}

Query submitted
当用户确认输入,或键盘回车键后,对于输入信息进行处理。

private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{string txt = args.QueryText;  //输入的文本if (args.ChosenSuggestion != null){//从提示框中选择某一项时触发}else{//用户在输入时敲回车或者点击右边按钮确认输入时触发}
}

2 . ItemInvoked事件处理
当用户选中导航栏中某一个Item时触发。跳转到特定页面。

private void nvAll_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{//先判断是否选中了settingif (args.IsSettingsInvoked){contentFrame.Navigate(typeof(SettingsPage));}else{//选中项的内容switch (args.InvokedItem){case "Home":ContentFrame.Navigate(typeof(HomePage));break;}}
}

3 . 从CS代码定义导航栏Item

定义描述导航栏Item的类

public abstract class NavItemBase
{
}public class NavItem : NavItemBase
{public string Title { get; set; }public string Icon { get; set; }public IconType IType { get; set; }public string Tooltip { get; set; }public bool TooltipAvailable { get => !String.IsNullOrEmpty(Tooltip); }public PageType DPage { get; set; }public NavItem(string title, string icon, IconType iType, PageType dPage, string tooltip = null){Title = title;Icon = icon;IType = iType;DPage = dPage;Tooltip = tooltip;}
}public class NavSeparator : NavItemBase
{
}public class NavHeader : NavItemBase
{public string Title { get; set; }public NavHeader(string title){Title = title;}
}public enum IconType { ImageIcon, FontIcon }  //Icon类型,使用图片或文字图标
public enum PageType { MainPage }  //单击导航栏Item后导航到的Page的Tag

有3种类型,分别对应NavigationViewItem ,NavigationViewItemSeparator ,NavigationViewItemHeader。
Item定义标题(显示的文字内容),图标,鼠标悬停时显示的Tooltip以及鼠标单击后导航到的Page。
赋值的时候需要注意,文字图标指的是 Segoe MDL2 Assets 中的符号,输入时使用4位的Unicode编码。如"\uE702"为蓝牙图标。
在你的主页中添加NavigationView控件,使用如下代码添加Item:

public void InitNav()
{nvAll.MenuItems.Add(new NavigationViewItemSeparator());foreach (var i in _NavItemViewModel._NavItems){if (i is NavItem){var item = i as NavItem;var Item = new NavigationViewItem() { Content = item.Title, Tag = item.DPage, DataContext = item };if (item.IType == IconType.ImageIcon){Item.Icon = new BitmapIcon() { UriSource = new Uri(item.Icon, UriKind.RelativeOrAbsolute) };}else if (item.IType == IconType.FontIcon){Item.Icon = new FontIcon() { FontFamily = new FontFamily("Segoe MDL2 Assets"), Glyph = item.Icon };}if (item.TooltipAvailable)ToolTipService.SetToolTip(Item, item.Tooltip);nvAll.MenuItems.Add(Item);}else if (i is NavSeparator){nvAll.MenuItems.Add(new NavigationViewItemSeparator());}else if (i is NavHeader){var item = i as NavHeader;var Header = new NavigationViewItemHeader();Header.Content = item.Title;nvAll.MenuItems.Add(Header);}}
}

选中Item时触发ItemInvoked

private void nvAll_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{//先判断是否选中了settingif (args.IsSettingsInvoked){contentFrame.Navigate(typeof(SettingsPage));}else{//找出当前选中的itemNavigationViewItem invokedItem;try{invokedItem = nvAll.MenuItems.Where(i => i is NavigationViewItem).Cast<NavigationViewItem>().Single(i => i.Content == args.InvokedItem);}catch (InvalidOperationException ex){//找不到选中的item,正常操作时不会出现此异常。return;}PageType page = ((NavItem)(invokedItem.DataContext)).DPage;//根据page所指向的页面,写对于Frame的Navigate操作。}
}

发个成品截图

_NavItems = new List<NavItemBase>();
_NavItems.Add(new NavHeader("设置"));
_NavItems.Add(new NavItem("蓝牙", "\uE702", IconType.FontIcon, PageType.MainPage, "Bluetooth"));
_NavItems.Add(new NavItem("位置", "\uE707", IconType.FontIcon, PageType.MainPage, "Location"));
_NavItems.Add(new NavItem("声音", "\uE720", IconType.FontIcon, PageType.MainPage, "Voice"));
_NavItems.Add(new NavSeparator());
_NavItems.Add(new NavItem("QQ", "ms-appx:///Assets/QQ.png", IconType.ImageIcon, PageType.MainPage, "QQ"));

4 . Header样式
Header位于Frame的上方,一般用于显示页面名称以及CommandBar等内容,属于自定义的区域。给个简单的例子。

<NavigationView.HeaderTemplate><DataTemplate><Grid Margin="24,0,24,0"><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock FontSize="28" VerticalAlignment="Center" Text="Header"/><CommandBar Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center" DefaultLabelPosition="Right" Background="{x:Null}"><AppBarButton Label="Refresh" Icon="Refresh"/></CommandBar></Grid></DataTemplate>
</NavigationView.HeaderTemplate>

如果要禁止header,设置AlwaysShowHeader="False"


代码通过Visual Studio 2017测试。
转载请注明出处。

posted on 2018-11-08 01:05 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9926745.html

[UWP开发]NavigationView基础使用方法相关推荐

  1. SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流...

    SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...

  2. 【课程设计】UWP 开发入门小笔记(1)

    UWP 开发入门小笔记(1) 零.介绍 一.系列介绍[p1] 二.创建第一个属于自己的UWP应用[p2] (一)一个button的属性: (二)修改属性的三种方法 (三)字号(以后会细讲) 三.UWP ...

  3. JSP WEB开发入门基础到高手进阶教程002

    JSP WEB开发入门基础到高手进阶教程 -------开发入门 JSP与微软的Active Server Pages 兼容,但它是使用类似HTML的卷标以及Java程序代码段而不是VBScript. ...

  4. UWP开发入门(十六)——常见的内存泄漏的原因

    原文:UWP开发入门(十六)--常见的内存泄漏的原因 本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)--用Diagno ...

  5. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  6. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  7. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础-手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  8. Windows10 UWP开发 - 响应式设计

    Windows10 UWP开发 - 响应式设计 原文:Windows10 UWP开发 - 响应式设计 Windows10 UWP开发 - 响应式设计 本篇随笔与大家简单讨论一下在开发适配不同分辨率.宽 ...

  9. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  10. Linux基础优化方法(三)———字符集编码设置优化

    Linux基础优化方法(三)---字符集编码设置优化 一.什么是字符编码 二.编码GB2312.GBK.UTF-8 三.工作时有乱码的原因 四.进行优化 1.CentOS 6 ①.查看默认编码信息: ...

最新文章

  1. vim - ctags
  2. Index Condition Pushdown Optimization
  3. Linux 环境下vs2015 qt,QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)
  4. 计算机组成与维修考试试题,期末考试试题计算机组成与维修.doc
  5. 基础省选+NOI-第7部分 概率统计与多项式
  6. java抽象类例子_关于java抽象类的例子
  7. 配置高低档计算机,电脑配置低怎么办,电脑配置高但是fps低
  8. js实现全排列组合算法
  9. 天翼对讲机写频软件_【对讲机的那点事】摩托罗拉GM950E/I 车载台如何编程?(上)...
  10. unity 更换standard shader
  11. 发音程序c语言,用C语言发声
  12. 服务器显示中国移动,中国移动服务器地址是什么
  13. 项目屡屡破发,平台币遭遇价格腰斩:IEO的转折点已经到来
  14. homeassistant中通过SSH安装zerotier步骤
  15. matlab局部放大图片
  16. 985计算机硕士能进阿里吗,阿里员工:985硕士毕业,35岁才混到P7,后悔没早点入行!...
  17. bochs运行xp_bochs安卓模拟器,瞬间安卓变XP-已回复
  18. 微信小程序支付 java
  19. 数字图像处理---LOG算子和CANNY算子边缘提取(matlab)
  20. 用微信小程序开店之三——小程序还有5秒准备就绪……全军出击

热门文章

  1. .sql文件_优化体系--sql_trace+10046事件(上篇)
  2. 设计模式---组合模式(C++实现)
  3. 查看crontab的执行日志
  4. 《设计模式之美》之接口、抽象类笔记
  5. [渝粤教育] 广东-国家-开放大学 21秋期末考试建设工程法规10221k1
  6. 【渝粤教育】国家开放大学2019年春季 2106宪法学 参考试题
  7. VMware虚拟机下Ubuntu安装VMware Tools详解
  8. zuul压力测试与调优
  9. 使用 IntelliJ IDEA打包Spark应用程序
  10. Android---------------Handler的学习