在wpf中将图像添加到树视图中

时间:2011-04-21 05:04:40

标签: wpf vb.net xaml

我在wpf中有一个treeview控件。我需要在evry node添加一个图像。有可能吗?

2 个答案:

答案 0 :(得分:1)

如果您想为每个节点提供唯一的图像,您可以执行以下操作:

    <TreeView>
        <TreeViewItem>
            <TreeViewItem.Header>
                <Image Source="/WpfApplication2;component/folder.png" Height="25" Width="25"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <Image Source="/WpfApplication2;component/folder1.png" Height="25" Width="25"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <Image Source="/WpfApplication2;component/folder2.png" Height="25" Width="25"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <Image Source="/WpfApplication2;component/folder3.png" Height="25" Width="25"/>
            </TreeViewItem.Header>
        </TreeViewItem>
    </TreeView>

或者,如果你想为每个节点拥有相同的图像,你可以这样做:

    <Window.Resources>
    <Image Source="/WpfApplication2;component/folder.png" Height="25" Width="25" x:Key="FolderIcon" x:Shared="false"/>
</Window.Resources>
<Grid>
    <TreeView>
        <TreeViewItem>
            <TreeViewItem.Header>
                <StaticResourceExtension ResourceKey="FolderIcon"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <StaticResourceExtension ResourceKey="FolderIcon"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <StaticResourceExtension ResourceKey="FolderIcon"/>
            </TreeViewItem.Header>
        </TreeViewItem>
        <TreeViewItem>
            <TreeViewItem.Header>
                <StaticResourceExtension ResourceKey="FolderIcon"/>
            </TreeViewItem.Header>
        </TreeViewItem>
    </TreeView>
</Grid>

希望这有帮助。

更新以回答以下问题:“如何在点击/展开节点时更改图像/图标”

这是一个快速而肮脏的解决方案。

的Xaml:

<Window.Resources>
    <Image Source="/WpfApplication2;component/folder.png" Height="25" Width="25" x:Key="FolderIcon" x:Shared="false"/>
    <Image Source="/WpfApplication2;component/folderOpened.jpg" Height="25" Width="25" x:Key="FolderOpenIcon" x:Shared="false"/>
</Window.Resources>
<Grid>
    <TreeView>
        <TreeViewItem PreviewMouseLeftButtonDown="itemExpanded" Name="treeViewItem">
            <TreeViewItem.Header>
                <StaticResourceExtension ResourceKey="FolderIcon"/>
            </TreeViewItem.Header>
            <TreeViewItem>
                <TreeViewItem/>
            </TreeViewItem>
        </TreeViewItem>
    </TreeView>
</Grid>

C#/ Code-behind

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void itemExpanded(object sender, RoutedEventArgs e)
    {
        if (treeViewItem.IsExpanded)
        {
            treeViewItem.Header = FindResource("FolderIcon");
        }
        else
        {
            treeViewItem.Header = FindResource("FolderOpenIcon");
        }          
    }
}

您也可以使用“Expanded”事件完成此操作。如果你想要消除“代码隐藏”,你也可以使用命令或转换器。

答案 1 :(得分:0)

  1. 将图片移至资源部分并设置x:Shared =“False”:

    <Window.Resources>
    <Image Source="links.png" x:Key="imgLinks" x:Shared="False"/>
    

  2. 在模板中使用它:<StaticResource ResourceKey="imgLinks"/>