是否可以为StaticResource动态创建ResourceKey? (例如使用绑定)

时间:2012-11-07 01:31:50

标签: wpf

假设我绑定的对象有一个带有表示ResourceKey的字符串的属性 - 如何让StaticResource根据对底层对象的绑定动态获取它的ResourceKey?

我想要与此相同的东西

MyProperty="{StaticResource ResourceKey={Binding Path=MyProperty}}"

虽然这个编译,但它会失败抱怨它无法找到System.Windows.Data.Binding类型的键

如果基础值发生变化(例如DynamicResource)

,我不需要动态重新评估

2 个答案:

答案 0 :(得分:3)

我在这里找到了我想要的东西:

http://blog.functionalfun.net/2009/12/specifying-resource-keys-using-data_31.html

这是一个自定义标记扩展,其行为类似于常规绑定,但Path将指向将目标转换为ResourceKey的属性,然后绑定将返回资源!

我发现这非常有用!

答案 1 :(得分:0)

也可以在XAML代码

中完成
<MyControl.Resources>
    <Image x:Key="Image_1" Source="{StaticResource ResourceKey={x:Static img:ImageResourcesKeys.Image_1}}" x:Shared="false"/>
    <Image x:Key="Image_2" Source="{StaticResource ResourceKey={x:Static img:ImageResourcesKeys.Image_2}}" x:Shared="false"/>
    <Style TargetType="MyProperty">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ImageType}" Value="Image_1">
                <Setter Property="MyProperty" Value="{StaticResource Image_1}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding ImageType}" Value="Image_2">
                <Setter Property="MyProperty" Value="{StaticResource Image_2}" />
            </DataTrigger>
         </Style.Triggers>
     </Style>
 </MyControl.Resources>

您只需要一个字符串属性ImageType来选择您要使用的图像