9

アイテムのレベルが 1 つだけの WPF TreeView があります。TreeView は、文字列の ObservableCollection にバインドされたデータです。TreeView の各ノードの左側に同じアイコンが表示されるようにするにはどうすればよいですか?

4

3 に答える 3

12

TreeViewを理解するのに役立つ最高の記事の1つは、これhttp://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspxだと思います。一般に、これは、WPF/SLの多くのシナリオをはるかに簡単にすることができる一連の優れたパターンを表しています。

于 2008-10-31T14:03:46.793 に答える
12

最善の方法は、TreeViewItems の Template を必要な Image に変更する TreeView に Style を設定することだと思います。

テンプレートは、おそらく画像とラベル コントロールを含む StackPanel である必要があります。画像をアイコンにバインドし、ラベル テキストを Observable コレクションの文字列にバインドします。

関連するコード スニペットをコード プロジェクトの記事からコピーしました。この記事では、これについて詳しく説明していますが、必要なのは以下だけだと思います (このコードは TreeView.Resources 要素に入ります)。

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Name="img"
                           Width="20"
                           Height="20"
                           Stretch="Fill"
                           Source="image.png"/>
                    <TextBlock Text="{Binding}" Margin="5,0" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2008-10-31T11:48:16.503 に答える
11

このようにJames OsbornStackPanel テクニックを使用しました...

XAML:

<TreeView Name="TreeViewThings" ItemsSource="{Binding}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Thing}"
                                  ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal" Margin="2">
                <Image Source="Thing.png"
                       Width="16"
                       Height="16"
                       SnapsToDevicePixels="True"/>
                <TextBlock Text="{Binding Path=Name}" Margin="5,0"/>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>
于 2009-02-20T20:11:19.240 に答える