XAML-Blend

时间:2019-05-23 12:36:57

标签: c# wpf xaml imagesource

我必须在WPF应用程序中显示SVG图像。 为了不使用第三方库,我手动(通过Inkscape)将SVG图像转换为XAML。

我的问题是XAML文件显示不正确。

如果我在Visual Studio Designer中查看这些XAML文件,则可以看到有些图像使用base64字符串作为“源”。设计器在“源”上显示警告“混合中不支持的文件类型”。

例如

  <Image xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="image4856" Source="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAVCAYAAABVAo5cAAAACXBIWXMAAAsSAAALEgHS3X78AAAB9ElEQVRIS72VW26DQAxFTwiBNI9W3UL3v7dKbRIgEOiHfTtmGvispSseY82xB9tspmniP6306wfwAhyAI7B3VcDO/QrXxiWbXKNrAHqgdV2Bm18bAfcY6Ow6YgFE6Na1BHy4eqADGgykYCdgFPAFOAGvwLvfn5hDI7Ag2cgc2JEyuwTfBzAIeMAAbxjwDYMr0xqLtGQZOLhaLLtvLFj59MBdwMoXD9iRvmLQMylLfcs1YI/BatIx6mhroBJw5y9UOCcS+ODvY/Hk3zAWS+V+CuKCBVwDZQQKumdesTpW+Sxl2Lu0pkqtCdUu4BaLaueLdVBskdgeMrVD6fsoW4GqsFYIqKgLUjUqozLcr2W48WuZSfsVZMCoIrt/9hxtzNaif9TvpJkyjdl9/hztmW98FzUDyjFOjJ5UfTqypW8ovyGT9hsJk0aLd1dHmhjb4LNjuS0UYONqfY87af8ZUCA1auWbK/p8iMvyDBtsrGloC9wTRluEXUmZqL86UtWtNf5ACvgba/oZVMAI2zOHxVmq8n4GfPB3ln6RoB1hljakX9CGdDSCxeZd+z3p07QY5AJ8YuAr0EagNpuwaJRt/B/G/pLFloj/Q0G/sGxvZEDBHjyZgcwbOrfYVmqN+F+8uToBWxJMx6lRFkdTnp0sz1IVq+NV0XQ/ErcAB5MZ6bUAAAAASUVORK5CYII=" Width="27" Height="20">
    <Image.RenderTransform>
      <TranslateTransform X="310" Y="279.5"/>
    </Image.RenderTransform>
  </Image>

如上所述,XAML文件直接在图形设计软件(Inkscape-SaveAs XAML)中转换。 VisualStudio是否在XAML中支持base64字符串作为图像源? 有人能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

因为 Base64 字符串包含一个编码图像缓冲区,该缓冲区可以由 WPF 的 BitmapDecoders 之一解码并通过 MarkupExtension 传递给图像对象。

public class Base64Image : MarkupExtension
{
    public string Source { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        using (var stream = new MemoryStream(Convert.FromBase64String(Source)))
        {
            return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
        }
    }
}

在 Xaml 中:

<Image Source="{markupExtensions:Base64Image Source='...'}" Width="176.3889" Height="44.097225" Stretch="Fill"/>