Как добавить значки рядом с узлами в WPF TreeView? - PullRequest
9 голосов
/ 30 октября 2008

У меня есть WPF TreeView только с 1 уровнем элементов. TreeView - это данные, привязанные к ObservableCollection строк. Как я могу убедиться, что один и тот же значок появляется слева от каждого узла в TreeView?

Ответы [ 3 ]

12 голосов
/ 31 октября 2008

Я думаю, что одна из лучших статей, которая поможет вам понять TreeView, это http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx. В общем, это описывает хороший набор шаблонов, которые могут значительно упростить многие сценарии в WPF / SL .

12 голосов
/ 31 октября 2008

Я думаю, что лучший подход - это установить стиль для TreeView, который изменит шаблон TreeViewItems, чтобы получить желаемое изображение.

Шаблон, вероятно, должен быть StackPanel с элементом управления Image и label, вы привязываете изображение к своей иконке, а текст метки - к строкам из коллекции 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>
11 голосов
/ 20 февраля 2009

Я использовал Джеймс Осборн Техника StackPanel ...

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...