【问题标题】:WPF TreeviewItem header text is set to object type when using stackpanel使用 stackpanel 时 WPF TreeviewItem 标题文本设置为对象类型
【发布时间】:2012-05-31 20:18:58
【问题描述】:

我正在尝试创建一个包含图像和文本的项目的树视图。

我遵循了这个示例 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>

【问题讨论】:

  • 您是否设置了任何模板,例如TreeViewItem 的 Template 或 TreeView 的 HeaderTemplate?
  • 是的,我在 TreeView 上设置了 HeaderTemplate 用于包装文本。请参阅上面的更新问题。

标签: c# wpf treeview stackpanel


【解决方案1】:

您可以将 HeaderTemplate 中的 TextBlock 替换为 ContentPresenter 或删除 HeaderTemplate 以获得正确的结果。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多