我的问题看起来很简单:我的主页上有一个视图框,根据所选主题(theme1或theme2),我想显示相应的图像(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类似)中定义canvas 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}”/&gt; - 在System.Windows.StaticResourceExtension上提供值抛出异常 - 找不到名为WhiteImage的资源。当我将xaml更改为myImage btw时,我得到了同样的错误。谢谢你的帮助。在相关的说明中,我发现很难相信它是如此复杂 - 我想要做的就是:如果theme = black viewbox.child = whiteImage else viewbox.child = blackimage。
答案 0 :(得分:1)
您正在使用字符串作为Canvas的子项。你需要声明像这样的孩子
<Canvas x:Key="myImage">
<ContentControl Content="{StaticResource WhiteImage}" />
</Canvas>