1

我的问题似乎很简单:我的主页上有一个视图框,根据选择的主题(主题 1 或主题 2),我想显示适当的图像(WhiteImage 或 BlackImage,两者都在资源下的 myImages.xaml 中定义为 SVG 画布)。

这是我认为我可以做的:

<Viewbox x:Name="myCustomImage"
VerticalAlignment="Top"
Height="24"
Margin="0,0,10,0"
Child="{StaticResource myImage}" />

然后我尝试在 theme1.xaml(和 theme2.xaml 类似)中定义画布 myImage,如下所示:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:myApp">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="../Resources/myImages.xaml" />
    </ResourceDictionary.MergedDictionaries>

    ...
    <Color x:Key="myForegroundcolor">#FF63398F</Color>  
    ...
    <Canvas x:Key="myImage">WhiteImage</Canvas>

</ResourceDictionary>

这会引发错误消息 - 无法将“String”类型的值添加到“UI ElementCollection”类型的集合或字典中。

这首先是正确的方法吗?如果是,我该如何解决这个错误?

编辑:我在下面听从了 Dean 的建议(谢谢)。这就是我所做的:

将 resourcetheme1.xaml 更改如下:

<Canvas x:Key="myImage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Width="200"
        Height="100">
    <ContentControl Content="{StaticResource WhiteImage}" />

    <Canvas>
        <Canvas>
            <Path Fill="#FFFFFFFF"
                    Data=... />         
            <Path Fill="#FFFFFFFF"
                    Data=... />
        </Canvas>
    </Canvas>
</Canvas>

更改 mainpage.xaml 如下:

<Viewbox x:Name="myViewbox"
...
Height="32"
Child="{StaticResource WhiteImage}" />

向 .cs 添加了依赖属性:...

public Canvas myImage
{
    get
    {
        return (Canvas)GetValue(myImageProperty);
    }
    set
    {
        SetValue(myImageProperty, value);
    }
}

现在我在 mainpage.xaml Child="{StaticResource WhiteImage}" /> 的这一行上得到一个不同的错误 - 在 System.Windows.StaticResourceExtension 上提供值引发异常 - 找不到名为 WhiteImage 的资源。顺便说一句,当我将 xaml 更改为 myImage 时,我得到了同样的错误。谢谢你的帮助。在相关说明中,我很难相信它是如此复杂——我要做的就是:如果主题=黑色 viewbox.child=whiteImage 否则 viewbox.child=blackimage。

4

1 回答 1

1

您正在使用字符串作为 Canvas 的子项。你需要像这样声明孩子

<Canvas x:Key="myImage">
   <ContentControl Content="{StaticResource WhiteImage}" />
</Canvas>
于 2013-04-22T11:07:26.023 回答