如何在运行时引用WPF中的静态资源?

时间:2010-12-05 14:55:25

标签: wpf treeview binding

我创建了2个图像资源,我想从TreeView控件的HierarchicalDataTemplate中动态引用它们。

这是我的XAML代码:

  <TreeView Margin="17,22" Name="TreeView">
                <TreeView.Resources>
                    <BitmapImage x:Key="Icon1" UriSource="pack://application:,,,/icon1.ico"/>
                    <BitmapImage x:Key="Icon2" UriSource="pack://application:,,,/icon2.ico"/>
                </TreeView.Resources>
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{StaticResource Icon1}" Margin="0,0,5,0" Width="16" Height="16"/>
                            <TextBlock Text="{Binding Name}" Margin="0,2,0,0" FontWeight="Normal" FontSize="11"/>
                        </StackPanel>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>

图像的源绑定的正确语法是什么,以便我可以在运行时选择显示哪个静态图像?

2 个答案:

答案 0 :(得分:2)

您已经绑定了某些Name媒体资源。使用整数属性Icon扩展您的(view-)模型,该属性确定您希望为此条目显示Icon。然后你可以使用一个触发器:

<Image Margin="0,0,5,0" Width="16" Height="16">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="{StaticResource Icon1}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Icon}" Value="2">
                    <Setter Property="Source" Value="{StaticResource Icon2}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

答案 1 :(得分:0)

你的意思是代码隐藏吗?在代码隐藏中你可以说

BitmapImage b = (BitmapImage)TreeView.FindResource("Icon1");

然后将其分配给您需要的任何属性。

相关问题