我的问题似乎很简单:我的主页上有一个视图框,根据选择的主题(主题 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。