我尝试使用以下代码将每个NavBarGroup中的NavBarItem元素组织到树视图中:
<dxn:NavBarControl DataContext="{Binding}" ItemsSource="{Binding Bars}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<dxn:NavBarControl.Resources>
<Style TargetType="dxn:NavBarGroup">
<Setter Property="Header" Value="{Binding DisplayText}"/>
<Setter Property="Content" Value="{Binding MenuItems}"/>
<Setter Property="DisplaySource" Value="Content"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TreeView x:Name="MenuView" ItemsSource="{Binding}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=ChildItems}" >
<ContentControl>
<dxn:NavBarItem
DataContext="{Binding}"
Content="{Binding ItemText}" PreviewMouseUp="MenuItemOnPreviewMouseUp" Initialized="FrameworkContentElement_OnInitialized" />
</ContentControl>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</dxn:NavBarControl.Resources>
<dxn:NavBarControl.View>
<dxn:ExplorerBarView/>
</dxn:NavBarControl.View>
</dxn:NavBarControl>
这些组正确绑定,我只填充一个组,&#34;人员&#34;出于调试原因,使用迷你层次结构:
"Personnel"
--"Employees"
----"Contractors"
------"Time-sheets"
我在树视图中得到了正确的结构,但每个项目只有调用NavBarItem.ToString()
产生的文本。当我处理NavBarItem.Initialized
偶数时,sender
参数NavBarItem
实际上在Content
属性中具有正确的值,因此绑定不会全部被破坏,但我不知道是什么,我在这里寻求帮助。
答案 0 :(得分:1)
首先,需要注意NavBarGroup和NavBarItem是非可视元素。因此,如果您将它们用作ContentPresenter内容,则只会显示简单的字符串(就像您在案例中看到的那样)。
第二件事是NavBar不支持多级层次结构(仅限组级别和项目级别)。
因此,如果您需要显示两个以上的级别,您可以使用样本中使用的TreeView,但将TreeViewItems放入内容模板而不是放置NavBarItems;如果只需要两个级别,则可以使用NavBarControl.ItemsSource和NavBarGroup.ItemsSource属性来填充布局。