Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用stackpanel时,WPF TreeviewItem标题文本设置为对象类型_C#_Wpf_Treeview_Stackpanel - Fatal编程技术网

C# 使用stackpanel时,WPF TreeviewItem标题文本设置为对象类型

C# 使用stackpanel时,WPF TreeviewItem标题文本设置为对象类型,c#,wpf,treeview,stackpanel,C#,Wpf,Treeview,Stackpanel,我正在尝试制作一个包含图像和文本的项目的树状视图 我遵循了这个示例,但是在treeviewitem头上出现了一个奇怪的行为 标题应该包含一个图像和一个标签,但它显示为所有树视图项的标题文本:System.Windows.Controls.StackPanel 这是我的密码: tree_view.Items.Add(GetTreeView("text")); private TreeViewItem GetTreeView(string text) { TreeViewItem newT

我正在尝试制作一个包含图像和文本的项目的树状视图

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

我通过删除xaml中的
HeaderTemplate
解决了这个问题

然后,在我的代码隐藏文件中,我将
标签更改为
Textblock
,然后在
Textblock
对象上设置
TextWrapping
Width
-属性,如下所示:

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

您可以使用ContentPresenter替换
标题模板
中的
文本块
,或者删除
标题模板
,以获得正确的结果


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

您是否设置了任何模板,例如TreeView或TreeView?是的,我在TreeView上设置了HeaderTemplate以包装文本。见上面更新的问题。