我的问题的第一部分
我正在创建一个使用NavigationView类的UWP应用,并且需要一些帮助来构建一种很好的方法来管理我如何使用背后的代码(而不是标记语言)来管理控件的创建。
我决定与以标记语言xaml添加控件相反,我将使用C#创建控件列表并将这些控件添加为NavView_Loaded方法的一部分。
我了解仅使用xaml创建UI会有好处。但是,我打算在各种不同的情况下看到或隐藏控件,并且发现通过使用mainpage类在C#或C#中处理代码来维护控件的状态更加容易。
目前,我有类似以下内容
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public ObservableCollection<NavigationViewItem> SetNavViewItems()
{
var navitems = new ObservableCollection<NavigationViewItem>
{
new NavigationViewItem()
{
Content = "Home",
Icon = new SymbolIcon(Symbol.Home),
Tag = "home",
Visibility = Visibility.Visible,
},
new NavigationViewItem()
{
Content = "Documents",
Icon = new SymbolIcon(Symbol.Document),
Tag = "documents",
Visibility = Visibility.Visible,
},
new NavigationViewItem()
{
Content = "Library",
Icon = new SymbolIcon(Symbol.Library),
Tag = "library",
Visibility = Visibility.Visible,
}
};
return navitemsHome;
}
private void NavView_Loaded(object sender, RoutedEventArgs e)
{
navitems = SetNavViewItems();
foreach (var navitem in navitems)
{
NavView.MenuItems.Add(navitem);
}
}
}
据我了解,在此示例中,我使用了一个强类型的集合以包含NavigationViewItem的集合。我在这里的问题是,我希望创建各种类型的控件(即NavigationViewItemHeader,NavigationViewItem,NavigationViewList,NavigationViewItemSeparator)的集合,列表或数组列表。...我不确定哪个最合适;列表,集合(弱类型),数组列表或是否有更好的选择。
完善我的解释。
然后我有一个单独的(字符串)列表,其中包含我用于测试条件并设置相应控件是否可见的所有导航项标签。
问题的第二部分
我正在苦苦挣扎的另一个UI控件(可能会也可能不会完全实现为NavigationView类的一部分)正在扩展Item或Header以显示子项列表。我目前的理解是NavigationViewItem是最适合用作主标题/项目的控件。子项应使用NavigationViewList。然后,我可以编写一种方法来设置NavigationViewList控件的可见性,该方法在用户单击相应的NavigationViewItem时触发。
第三部分也是最后一部分
每当我在NavigationView(即堆栈面板)中创建控件时,它似乎都会自动使用内容样式为默认样式(即高度)的内容堆栈面板创建NavigationViewItem。我希望这是预期的,并且可以从NavigationViewBase在NavigationView继承集中创建任何控件。令人沮丧的是,我似乎很难显示来自NavigationViewBase继承的堆栈面板或网格的多行。谁能阐明一些想法?这是我的想法,还是在NavigationView类中创建控件时需要了解一些重要的知识。
任何帮助,不胜感激!
谢谢!