手动将项目添加到TreeView时加载ItemTemplate?

时间:2013-01-27 19:06:48

标签: c# wpf xaml treeview itemtemplate

我正在手动创建我的节点(TreeViewItems),我的意思是代码背后。我这样做是因为我在扩展时根据需要填充子项目,我必须添加一个虚拟节点。这就是我为什么要手动添加项目的原因。

现在,最重要的是当我创建TreeViewItem时不显示DataTemplate并显示默认值。输出窗口没有任何说明。

        DataTemplate dt1 = this.Resources["exerciseSetTemplate"] as DataTemplate;

        foreach (var qs in qss)
        {
            TreeViewItem tvi = new TreeViewItem();
            tvi.Header = qs.SetName;
            tvi.Tag = qs;
            tvi.ItemTemplate = dt1;
            tvi.Items.Add(yourDummyNode);

            treeView1.Items.Add(tvi);
        }

这是我的XAML代码:

<UserControl.Resources>
    <DataTemplate x:Key="questionSetTemplate">
        <StackPanel Orientation="Horizontal" Height="20" Margin="2,0,2,0">
            <Image Width="16" Height="16" Source="{StaticResource FolderImage}" Margin="0,0,5,0" />
            <TextBlock Text="{Binding SetName}" />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>

<Grid>
    <TreeView x:Name="treeView1" TreeViewItem.Expanded="treeView1_Expanded_1"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    </TreeView>
</Grid>

如何显示DataTemplate?

2 个答案:

答案 0 :(得分:2)

我认为最好的选择是不将对象直接添加到TreeView Items属性(因为这将忽略DataTemplates)并创建Collection以将这些项添加到并绑定那个TreeView,然后您可以删除x:Key的{​​{1}}属性并使用DataTemplate,这会将模板应用于集合中该类型的任何对象到你的DataType

示例:

TreeView

代码:

<UserControl x:Class="WpfApplication8.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication8"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" Name="UI">
    <UserControl.Resources>
        <DataTemplate DataType="{x:Type local:MyObject}">
            <StackPanel Orientation="Horizontal" Height="20" Margin="2,0,2,0">
                <!--<Image Width="16" Height="16" Source="{StaticResource FolderImage}" Margin="0,0,5,0" />-->
                <TextBlock Text="{Binding SetName}" Foreground="Red"/>
            </StackPanel>
        </DataTemplate>
    </UserControl.Resources>

    <Grid DataContext="{Binding ElementName=UI}">
        <TreeView x:Name="treeView1" ItemsSource="{Binding TreeItems}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
    </Grid>
</UserControl>

答案 1 :(得分:0)

您忘记将树ItemsTemplate设置为DataTemplate