0

画像とテキストの両方を持つアイテムでツリービューを作成しようとしています。

この例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>
4

2 に答える 2

1

をContentPresenterに置き換えるか、を削除しTextBlockて正しい結果を得ることができます。HeaderTemplateHeaderTemplate

設定によりHeaderTemplate、TVIのヘッダーはテキストブロックとして表示され、そのデータコンテキストはスタックパネルに変更されます。

于 2012-05-25T10:00:12.443 に答える
0

xamlでを削除することで、これを修正できましHeaderTemplateた。

次に、コード ビハインド ファイルで を に変更Labelし、 -objectにおよび-properties を次のようにTextblock設定します。TextWrappingWidthTextblock

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;
}
于 2012-05-25T09:50:55.817 に答える