0

根据这篇文章,我正在使用一些多触发器。绑定和错误如下。

我正在使用自定义标记扩展来显示资源图像,所以它可能是可疑的,但我不这么认为,因为我以前在样式中使用过它。

错误消息说我为该类型应用了错误的属性,但我还不明白为什么。

干杯,
贝里尔

触发器

<Style x:Key="AvatarPathImageStyle" TargetType="{x:Type Image}">
    <Setter Property="Source" Value="{Binding AvatarPath}"/>
    <Setter Property="Height" Value="96"/>
    <Setter Property="Width" Value="96"/>
    <Setter Property="Stretch" Value="UniformToFill"/>
    <Style.Triggers>

        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding AvatarPath}" Value="{x:Null}" />
                <Condition Binding="{Binding Gender}" Value="{x:Static domain:Gender.Female}"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Source" Value="{resx:Resx ResxName=Smack.Parties.Presentation.Resources.PersonDetailView, Key=Img_Female}"/>
        </MultiDataTrigger>

        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding AvatarPath}" Value="{x:Null}" />
                <Condition Binding="{Binding Gender}" Value="{x:Static domain:Gender.Male}"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Source" Value="{resx:Resx ResxName=Smack.Parties.Presentation.Resources.PersonDetailView, Key=Img_Male}"/>
        </MultiDataTrigger>
        </MultiDataTrigger>

    </Style.Triggers>
</Style>

捆绑

<Image Grid.Column="1" Grid.Row="4" 
       HorizontalAlignment="Center" Margin="10, 0" Style="{StaticResource AvatarPathImageStyle}"
      />

错误

System.Windows.Markup.XamlParseException occurred
...  InnerException: System.ArgumentException
       Message='System.Windows.Controls.Image' is not a valid value for the 'System.Windows.Controls.Image.Source' property on a Setter.
 ...

更新

静态访问图像也会得到 Invalid Type 错误:

<Setter Property="Source" Value="{x:Static imgResources:PersonDetailView.Img_Female}"/>
4

1 回答 1

1

评论转换为答案:

错误的原因是存储在 resx 文件中的图像类型为System.Windows.Drawing.Image,与 WPF 不直接兼容。您可以编写转换器,但除非您有充分的理由使用资源字典,否则我只会嵌入图像并通过相对于 XAML 文件的 URL 引用它们

于 2012-05-18T07:08:09.787 回答