[英]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替换HeaderTemplate
的TextBlock
或删除HeaderTemplate
以获取正确的结果。
由于设置了HeaderTemplate
,因此TVI的标题将显示为文本块,并且其数据上下文更改为堆栈面板。
我设法通过删除xaml中的HeaderTemplate
来解决此问题。
然后,在我的代码隐藏文件,我改变了Label
,以Textblock
,然后设置TextWrapping
和Width
-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.