每个NavbarControl组中的TreeListControl

时间:2012-08-21 15:22:05

标签: c# wpf

我是WPF的新手,我正在尝试在每个导航栏组中创建一个树形导航。由于导航栏组和树状列表的数量是动态的,我必须在代码中创建它们,而不是在XAML中预先定义它们。

到目前为止,我已经测试过以下内容,用于定义导航栏组的内容,而不是使用默认项

private void CreateGroup2(NavBarControl navBar)
{
    NavBarGroup group2 = new NavBarGroup();
    group2.Header = "Custom Content";
    //Specify that the group's content should be defined via the Content property
    group2.DisplaySource = DisplaySource.Content;

    TreeListControl tree = new TreeListControl();
    tree.ItemsSource = TreeList_DataBinding.Stuff.GetStuff();
    group2.Content = tree;


    navBar.Groups.Add(group2);
}

这给出了一个异常:Grid.InfiniteGridSizeException:默认情况下,不允许无限网格高度,因为所有网格行都将被渲染,因此网格将非常缓慢地工作。要解决此问题,您应该将网格放置到一个容器中,该容器将为网格提供有限的高度,或者您应该手动指定网格的Height或MaxHeight。请注意,您还可以通过将TreeListControl.AllowInfiniteGridSize静态属性设置为True来避免此异常,但在这种情况下,网格将运行缓慢。

我有点困惑,因为我没有使用网格?任何人都可以指出什么是错的,以及如何在每个导航栏组下添加treview?

谢谢

1 个答案:

答案 0 :(得分:0)

回答我自己的问题感觉有点不对,但我设法使用以下

让它工作
private void CreateGroup2(NavBarGroup navBarGroup)
{

    System.Windows.Controls.TreeView treeview = new System.Windows.Controls.TreeView();

    TreeViewItem nod = new TreeViewItem();
    nod.Header = "Tree Node1";
    treeview.Items.Add(nod);

    TreeViewItem nod1 = new TreeViewItem();
    nod1.Header = "Tree Node2";
    treeview.Items.Add(nod1);

    TreeViewItem nod2 = new TreeViewItem();
    nod2.Header = "Tree Node3";
    nod1.Items.Add(nod2);

    //StackPanel stcPnl = new StackPanel(); /optiona
    //stcPnl.Children.Add(treeview);
    //navBarGroup.Content = stcPnl;

    navBarGroup.Content = treeview;

    navBarGroup.DisplaySource = DisplaySource.Content;

}