我正在尝试将可重用的SVG图像导入WPF。
我有一个合并字典,其中包含一个外部xaml文件的条目,该文件包含一个画布,而画布又来自一个SVG文件。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas x:Key="myImage" Name="myImage" Width="110" Height="35">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</Canvas.RenderTransform>
<Canvas.Resources/>
<Canvas Name="layer1">
<Canvas.RenderTransform>
<TranslateTransform X="-51.393708" Y="-16.078911"/>
</Canvas.RenderTransform>
<Ellipse...
请注意,此处指定了画布的宽度和高度。
为了让它出现在窗口中,我将它添加到窗口的资源中:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="XamlResources/myImage.xaml"/>
</ResourceDictionary.MergedDictionaries>
...
<Viewbox Width="200" Stretch="Uniform" HorizontalAlignment="Left">
<Canvas Width="110" Height="35">
<StaticResource ResourceKey="myImage"/>
</Canvas>
</Viewbox>
请注意,此处再次指定了Canvas的宽度和高度。
我的问题是,为什么我需要在资源和窗口控件中指定画布大小(110x35)?如果我删除窗口中的画布大小,则:
<Canvas Width="110" Height="35">
<StaticResource ResourceKey="myImage"/>
</Canvas>
然后图像消失了。
我在尝试将可重用的SVG图像放入WPF中时是否做了一些根本性的错误?
1条答案
按热度按时间rqdpfwrv1#
请注意,此处再次指定了Canvas的宽度和高度。
不,您正在创建一个新的
Canvas
,它 Package 了另一个违反您的资源字典的Canvas
。如果你想直接使用
myImage
资源,你应该像这样引用它:那么您就不需要多次指定大小。
但是为了能够在多个地方重用资源,您应该将资源的x:Shared attribute设置为
false
,以防止重复使用相同的Canvas
示例表单: