代码之家  ›  专栏  ›  技术社区  ›  Luke Foust

XAML项目(Silverlight/WPF)图像或转换的XAML路径

  •  2
  • Luke Foust  · 技术社区  · 15 年前

    我和我的同事正在讨论将项目使用的图标转换为XAML的相对优点。Blend有一个“导入”选项,我们可以使用它自动将项目中的一些图像资源转换为XAML路径元素。

    一方面,通过生成XAML,程序集将保持较小。另一方面,有一个简单的图像参考。我认为有缺陷的另一个论点(如果我错了,请纠正我)是,我们需要“缩小”XAML,包括<image source=“…”的更少击键,而<path data=“…”将包含更多文本。

    什么是其他的经验,有没有一种方法是绝对“正确的”。

    1 回复  |  直到 15 年前
        1
  •  2
  •   bitbonk    15 年前

    您可以将XAML绘图放入资源字典中,然后引用它们。这将生成保持较小的程序集,您只需添加对图形的引用,就可以得到完全“缩小”的XAML。与第一种方法相比,不需要额外的击键。

    在项目的某个地方,您有一个包含绘图的资源字典:

    <DrawingImage x:Key="image1">
        <DrawingImage.Drawing>
            <GeometryDrawing>
                <GeometryDrawing.Geometry>
                    <GeometryGroup>
                        <EllipseGeometry Center="50,50" RadiusX="45" RadiusY="20" />
                        <EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
                    </GeometryGroup>
                </GeometryDrawing.Geometry>
                <GeometryDrawing.Brush>
                    <LinearGradientBrush>
                        <GradientStop Offset="0.0" Color="Blue" />
                        <GradientStop Offset="1.0" Color="#CCCCFF" />
                    </LinearGradientBrush>
                </GeometryDrawing.Brush>
                <GeometryDrawing.Pen>
                    <Pen Thickness="10" Brush="Black" />
                </GeometryDrawing.Pen>
            </GeometryDrawing>
        </DrawingImage.Drawing>
    </DrawingImage>
    

    根据位图的大小和复杂性,这不会占用作为资源添加到程序集的位图所需的更多空间,也不会占用使用XAML实际节省的空间。

    然后在代码中引用此绘图,只需引用位图。没有区别:

    <Image Source="{StaticResource image1}" />
    

    你可以使用 Microsoft Expression Design 自动向量化位图(“对象->图像->自动跟踪位图”)并将其导出为XAML图形。不过,它将创建一个DrawingBrush。但你可以安全地用绘图图像替换它。