XAML: x:Array 个静态资源

XAML: x:Array of static resources

我在 ResourceDictionary:

中声明了多个 BitmapImage
<BitmapImage x:Key="LockImageSource"   UriSource="img/lock.png"   />
<BitmapImage x:Key="UnlockImageSource" UriSource="img/unlock.png" />
...

我的转换器采用两个 ImageSource 元素的数组参数来根据传递的值选择要显示的图像之一:

<Image Source="{Binding Path=IsLocked,
                   Converter={StaticResource AlteringConverter},
          ConverterParameter={StaticResource LockUnlockImageSourcePair}}"
       Width="16" Height="16" />

LockUnlockImageSourcePair资源应该是什么样的?

<x:Array x:Key="LockUnlockImageSourcePair" Type="{x:Type BitmapImage}">
    <??? />
    <??? />
</x:Array>

您可以将此简单样式与 DataTrigger 结合使用,而不是使用带有转换器和复杂 ConverterParameter 的绑定:

<Image Width="16" Height="16">
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source" Value="{StaticResource UnlockImageSource}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLocked}" Value="True">
                    <Setter Property="Source" Value="{StaticResource LockImageSource}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

如果您想为多个图像控件重用样式,您可以将其声明为资源:

<Style x:Key="LockUnlockImageStyle" TargetType="Image">
    <Setter Property="Width" Value="16"/>
    <Setter Property="Height" Value="16"/>
    <Setter Property="Source" Value="{StaticResource UnlockImageSource}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsLocked}" Value="True">
            <Setter Property="Source" Value="{StaticResource LockImageSource}"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
...

<Image Style="{StaticResource LockUnlockImageStyle}"/>