XAML 在ViewBox中缩放画布资源

vsdwdz23  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(156)

我正在尝试将可重用的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中时是否做了一些根本性的错误?

rqdpfwrv

rqdpfwrv1#

请注意,此处再次指定了Canvas的宽度和高度。
不,您正在创建一个新的Canvas,它 Package 了另一个违反您的资源字典的Canvas
如果你想直接使用myImage资源,你应该像这样引用它:

<StaticResource ResourceKey="myImage"/>

那么您就不需要多次指定大小。
但是为了能够在多个地方重用资源,您应该将资源的x:Shared attribute设置为false,以防止重复使用相同的Canvas示例表单:

<Canvas x:Key="myImage" x:Shared="false" ... />

相关问题