我创建了一些
NavigationViewItem
并设置了它的x:Name
和Tag
,比如:
<NavigationView x:Name="nvSample"
SelectionChanged="nvSample_SelectionChanged"
IsBackButtonVisible="Collapsed"
IsSettingsVisible="False">
<NavigationView.MenuItems>
<NavigationViewItem x:Name="NavigationViewItem_HomePage" Icon="Home" Content="Home" Tag="HomePage" IsSelected="True" />
<NavigationViewItem x:Name="NavigationViewItem_SimpleSortPage" Icon="Sort" Content="Sort" Tag="SimpleSortPage" />
<...........>
</NavigationView.MenuItems>
</NavigationView>
我想通过
NavigationViewItem
或 x:Name
找到 Tag
对象,以便我可以通过代码更改 Content
和 IsSelected
属性。
我发现
Type.GetType
可能会通过x:Name
获得页面,例如:
Type pageSelected = Type.GetType("NumberSort.Pages.SimpleSort");
RootPageFrame.Navigate(pageSelected,this);
所以我尝试用它来获取
NavigationViewItem
对象,例如:
var NavigationItem = (NavigationViewItem)Type.GetType("NavigationViewItem_HomePage");
但是,它不起作用。
您可以创建如下扩展方法:
NavigationViewExtensions.cs
public static class NavigationViewExtensions
{
// Get all NavigationViewItems from a NavigationViewItem.
public static IEnumerable<NavigationViewItem> GetAllNavigationViewItems(this NavigationViewItem navigationViewItem)
{
if (navigationViewItem.MenuItems is null)
{
yield break;
}
foreach (var menuItem in navigationViewItem.MenuItems.OfType<NavigationViewItem>())
{
yield return menuItem;
if (menuItem.MenuItems is null)
{
continue;
}
foreach (NavigationViewItem subMenuItem in menuItem.MenuItems.OfType<NavigationViewItem>())
{
yield return subMenuItem;
}
}
}
// Get all NavigationViewItems from a NavigationView.
public static IEnumerable<NavigationViewItem> GetAllNavigationViewItems(this NavigationView navigationView)
{
foreach (NavigationViewItem menuItem in navigationView.MenuItems.OfType<NavigationViewItem>())
{
yield return menuItem;
if (menuItem.MenuItems is null)
{
continue;
}
foreach (NavigationViewItem subMenuItem in menuItem.GetAllNavigationViewItems())
{
yield return subMenuItem;
}
}
}
}
并像这样使用它:
if (this.nvSample
.GetAllNavigationViewItems()
.FirstOrDefault(x => x.Name is "NavigationViewItem_HomePage") is NavigationViewItem navigationViewItem)
{
// Do something here.
}
我找到了一个简单的方法来做到这一点:
public static void SwitchPage (string pageName,NavigationView navigationView)
{
var navigationViewItems = navigationView.MenuItems.OfType<NavigationViewItem>().ToList();
if (navigationViewItems != null) {
foreach (var item in navigationViewItems)
{
if( item.Tag.Equals(pageName))
{
item.IsSelected = true; break;
}
}
}
else {throw new ArgumentNullException()};
}
在此示例中,它将
IsSelected
的 NavigationViewItem
属性设置为 true
,其中 pageName
等于
Tag
NavigationViewItem
的属性。