簡體   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