繁体   English   中英

使用Stackpanel时WPF TreeviewItem标头文本设置为对象类型

[英]WPF TreeviewItem header text is set to object type when using stackpanel

我正在尝试使用具有图像和文本的项目来制作树状视图。

我已经遵循了这个示例http://www.codeproject.com/Articles/124644/Basic-Understanding-of-Tree-View-in-WPF,但在treeviewitem标头上却遇到了奇怪的行为。

标头应该包含图像和标签,但是却显示为所有treeviewitems的标头文本: 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>

您可以使用ContentPresenter替换HeaderTemplateTextBlock或删除HeaderTemplate以获取正确的结果。

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

我设法通过删除xaml中的HeaderTemplate来解决此问题。

然后,在我的代码隐藏文件,我改变了Label ,以Textblock ,然后设置TextWrappingWidth -Properties的Textblock -object是这样的:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM