0

我正在尝试使用同时具有图像和文本的项目创建树视图。

我已经按照这个例子http://www.codeproject.com/Articles/124644/Basic-Understanding-of-Tree-View-in-WPF但我在 treeviewitem 标题上得到了一个奇怪的行为。

标题应该包含图像和标签,但它显示为所有树视图项的标题文本:System.Windows.Controls.StackPanel

这是我的代码:

tree_view.Items.Add(GetTreeView("text"));

private TreeViewItem GetTreeView(string text)
{
    TreeViewItem newTreeViewItem = new TreeViewItem();

    // create stack panel
    StackPanel stack = new StackPanel();
    stack.Orientation = Orientation.Horizontal;

    // create Image
    Image image = new Image();
    image.Source = new BitmapImage(new Uri(@"/ComponentName;component/Resources/Images/warning.png", UriKind.Relative));

    // Label
    Label lbl = new Label();
    lbl.Content = text;

    // Add into stack
    stack.Children.Add(image);
    stack.Children.Add(lbl);

    // assign stack to header
    newTreeViewItem.Header = stack;

    return newTreeViewItem;
}

编辑:

另外,我在 TreeView 的 HeaderTemplate 中有这个来包装文本:

<Setter Property="HeaderTemplate">
     <Setter.Value>
         <DataTemplate>
             <TextBlock Width="139" TextWrapping="Wrap" Text="{Binding}" />
         </DataTemplate>
     </Setter.Value>
</Setter>
4

2 回答 2

1

您可以用 ContentPresenter替换TextBlock您的 或删除以获得正确的结果。HeaderTemplateHeaderTemplate

由于您的HeaderTemplate设置,TVI 的标题将显示为文本块,其数据上下文更改为堆栈面板。

于 2012-05-25T10:00:12.443 回答
0

我设法通过删除HeaderTemplatexaml 中的 来解决这个问题。

然后,在我的代码隐藏文件中,我将 更改LabelTextblock,然后在 -object 上设置TextWrappingWidth-properties,Textblock如下所示:

tree_view.Items.Add(GetTreeView("text"));

private TreeViewItem GetTreeView(string text)
{
    TreeViewItem newTreeViewItem = new TreeViewItem();

    // create stack panel
    StackPanel stack = new StackPanel();
    stack.Orientation = Orientation.Horizontal;

    // create Image
    Image image = new Image();
    image.Source = new BitmapImage(new Uri(@"/ComponentName;component/Resources/Images/warning.png", UriKind.Relative));

    // Label
    Textblock lbl = new Textblock();
    lbl.Text = text;
    lbl.TextWrapping = TextWrapping.Wrap;
    lbl.Width = 139;

    // Add into stack
    stack.Children.Add(image);
    stack.Children.Add(lbl);

    // assign stack to header
    newTreeViewItem.Header = stack;

    return newTreeViewItem;
}
于 2012-05-25T09:50:55.817 回答