2

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

我想要与此等效的东西

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

虽然编译,但它会失败并抱怨找不到 System.Windows.Data.Binding 类型的键

如果基础值发生变化(例如 DynamicResource),我不需要动态重新评估

4

2 回答 2

3

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

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

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

我发现这非常有用!

于 2012-11-07T06:02:25.850 回答
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 来选择您要使用的图像

于 2013-12-11T08:03:53.377 回答