C# 使用stackpanel时,WPF TreeviewItem标题文本设置为对象类型
我正在尝试制作一个包含图像和文本的项目的树状视图 我遵循了这个示例,但是在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
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以包装文本。见上面更新的问题。