Svg在WPF中的使用

方法1:拷贝svg中的部分代码转换成Geometry(作为Path的Data使用)

在vs或者直接打开svg,看到如下代码:

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617931495763" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1226" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 0c282.782494 0 512 229.217506 512 512s-229.217506 512-512 512S0 794.782494 0 512 229.217506 0 512 0zM74.618454 547.333701l0.056444 0.677323c16.199317 199.358836 165.549113 361.013339 358.981369 395.839048C345.773564 831.414398 293.676111 694.256422 286.16911 548.631904H84.100981c-3.217286 0-6.434572-0.451549-9.482527-1.298203z m874.650204 1.298203h-211.494212c-7.507 145.568074-59.604454 282.72605-147.487157 395.274611 193.319369-34.882152 342.556278-196.254437 358.981369-395.274611z m-437.268658 375.180686l0.338662-0.395106c90.140448-104.08202 144.10054-234.918311 152.115533-374.78558H359.489362c8.071436 140.0366 62.144416 271.042222 152.510638 375.180686zM433.656267 80.206372l-6.660346 1.241759C236.611619 118.813802 90.309778 279.339433 74.618454 476.666299c2.878624-0.790211 5.926579-1.185316 8.918091-1.241759h202.689009c7.450557-145.624518 59.54801-282.782494 147.430713-395.218168z m78.343733 19.981038l-0.338662 0.395106C421.464447 204.664535 367.504355 335.500827 359.545805 475.368096h305.021277c-8.12788-140.0366-62.20086-271.042222-152.567082-375.180686z m78.343733-19.981038l1.580421 1.975526c86.923162 112.097012 138.456179 248.521221 145.963179 393.242642h211.494213c-16.537978-199.076618-165.774887-360.448903-359.037813-395.218168z" p-id="1227"></path></svg>

在代码中找到<path d=后面的“”内的数据部分,直接拷贝出来,作为Geometry的数据

<Geometry x:Key="DocGeometry" o:Freeze="True">M512 0c282.782494 0 512 229.217506 512 512s-229.217506 512-512 512S0 794.782494 0 512 229.217506 0 512 0zM74.618454 547.333701l0.056444 0.677323c16.199317 199.358836 165.549113 361.013339 358.981369 395.839048C345.773564 831.414398 293.676111 694.256422 286.16911 548.631904H84.100981c-3.217286 0-6.434572-0.451549-9.482527-1.298203z m874.650204 1.298203h-211.494212c-7.507 145.568074-59.604454 282.72605-147.487157 395.274611 193.319369-34.882152 342.556278-196.254437 358.981369-395.274611z m-437.268658 375.180686l0.338662-0.395106c90.140448-104.08202 144.10054-234.918311 152.115533-374.78558H359.489362c8.071436 140.0366 62.144416 271.042222 152.510638 375.180686zM433.656267 80.206372l-6.660346 1.241759C236.611619 118.813802 90.309778 279.339433 74.618454 476.666299c2.878624-0.790211 5.926579-1.185316 8.918091-1.241759h202.689009c7.450557-145.624518 59.54801-282.782494 147.430713-395.218168z m78.343733 19.981038l-0.338662 0.395106C421.464447 204.664535 367.504355 335.500827 359.545805 475.368096h305.021277c-8.12788-140.0366-62.20086-271.042222-152.567082-375.180686z m78.343733-19.981038l1.580421 1.975526c86.923162 112.097012 138.456179 248.521221 145.963179 393.242642h211.494213c-16.537978-199.076618-165.774887-360.448903-359.037813-395.218168z</Geometry>

我们直接将Geometry作为Path的Data

<Style x:Key="PathBaseStyle" TargetType="{x:Type Path}">
    <Setter Property="Fill" Value="Red" />
    <Setter Property="Width" Value="50" />
    <Setter Property="Height" Value="50" />
    <Setter Property="Stretch" Value="Uniform" />
    <Setter Property="Margin" Value="8,0,5,0" />
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="VerticalAlignment" Value="Stretch" />
</Style>
<Style x:Key="DefaultPathStyle" BasedOn="{StaticResource PathBaseStyle}" TargetType="{x:Type Path}" /> <Path Width="50" Height="50" Margin="0" Data="{DynamicResource DocGeometry}" Style="{DynamicResource DefaultPathStyle}" />

方法2:使用svg2xaml,转换器形式

public class Svg2ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (parameter == null) return null;
        string svgPath = parameter.ToString();
        using (FileStream stream = new FileStream(svgPath, FileMode.Open, FileAccess.Read))
        {
            return SvgReader.Load(stream);
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在界面的xaml文件中:

<Image Width="50" Source="{Binding Converter={StaticResource Svg2ImageConverter}, ConverterParameter='Resources/帮助-02.svg'}" />

这种方式中,svg文件的属性设置如下

在生成的执行程序中,会有svg文件的存在

方法3:使用svg2xaml,直接在xaml代码中使用

添加命名空间:

xmlns:svg2xaml="clr-namespace:Svg2Xaml;assembly=Svg2Xaml"

在控件内直接使用

<!--属性:资源、不复制-->
<Image Width="50" Source="{svg2xaml:SvgImage Resources/111.svg}" />
<Image Width="50" Source="{svg2xaml:SvgImage Resources/网络.svg}" />

此时需要设置svg文件的属性如下

4 方法的比较

特点 特点
方法1 能够在xaml设计器中预览svg的展示形式 需要手动拷贝有效数据,自己创建
方法2 无需操作,直接使用,直接被替换 可以被直接替换成其他svg
方法3 无需操作,直接使用 无法在设计器中预览

mc:Ignorable="d"

关于mc:Ignorable="d"的说明,使用vs生成的窗口都包含默认的这个特性,那他到底是做什么的?

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

1、首先,命名空间d是我们在写xaml文件时看到控件的大小,比如d:DesignWidth="480"表示在编辑器里面我们看到的大小480,但是运行调试大小并不一定是480,它可能随着屏幕的大小而发生改变

2、而命名空间mc是跟兼容性有关的,mc:Ignorable="d"的意思就是告诉编辑器(vs2017)在项目运行时忽略命名空间d设置的大小

WPF进阶技巧和实战01-小技巧的更多相关文章

  1. 必看!macOS进阶不得不知的实用小技巧

    不知道大家对使用苹果电脑的体验如何?您充分利用您的mac了吗?其实macOS上存在着许多快捷方式和技巧可以帮助简化我们的工作流程,提高效率,但是在日常生活中经常被人们忽略或者遗忘.以下是macdown ...

  2. 12个非常实用的JavaScript小技巧

    在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是 ...

  3. flex开发小技巧集锦

    关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...

  4. 12个十分实用的JavaScript小技巧

    12个非常实用的JavaScript小技巧 在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候 ...

  5. scanf和printf格式化输入输出中非常实用的小技巧

    输入输出几乎是每个C程序必须具备的功能,因为有了它们,程序才有了交互性.C提供的输入输出函数除了具有必须的输入输出功能外,还有一些其他实用的小技巧,了解这些小技巧将会为程序带来更友好的用户体验. 一. ...

  6. JavaScript使用中的一些小技巧

    任何一门技术在实际中都会有一些属于自己的小技巧.同样的,在使用JavaScript时也有一些自己的小技巧,只不过很多时候有可能容易被大家忽略.而在互联网上,时不时的有很多同行朋友会总结(或收集)一些这 ...

  7. WPF进阶技巧和实战03-控件(3-文本控件及列表控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  8. WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  9. MVC进阶讲解+小技巧-乱七八糟

    开发步骤 1.建立项目 2.建立文件夹 3.建立Controllers 4.生成页面 5.编写Html+Js 6.编写异步请求的Action的方法,返回部分页(用于分页) 7.Js中显示部分页 8.增 ...

  10. 微信小程序入门与实战 常用组件API开发技巧项目实战*全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

随机推荐

  1. SQL server多表联合查询

    参考网址: https://blog.csdn.net/zou15093087438/article/details/79226394 1. 外连接可分为:左连接.右连接.完全外连接. a.  左连接 ...

  2. vue中v-show和v-if在显示和隐藏元素上的区别

    v-show将元素隐藏是在dom节点上加style='display:none' v-if是直接将元素完全去掉 拿v-show示例,(v-if 也是一样,把下面的代码中v-show替换成v-if即可运 ...

  3. .net core2.1 迁移.net core 3.1

    1.解决方案->属性-->目标框架 .net core3.1 2.删除旧的Nuget包添加新的NuGet包 3.修改Startup.cs 修改ConfigureServices 修改Con ...

  4. 根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放

    ~function anonymous(window){ //根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放 let computedREM = function compu ...

  5. 辗转相除 求最大公约数!or 最小公倍数

    求最大公约数和最小公倍数的经典算法--辗转相除法描述如下: 若要求a,b两数的最大公约数和最小公倍数,令a为a.b中较大数,b为较小数,算法进一步流程: while(b不为0) { temp=a%b: ...

  6. mzy git学习, 保留现场,恢复现场,以及bug分支处理(七)

    git stash 在git中有时候我们工作做了一半,但是有点急事需要离开一段时间,或者现在需要切换到另一个分支下,去维护和修改一些其它的东西,但是我们现在的工作还没有完成,提交上去的话,并不是完整的 ...

  7. 关于servlet中要写初始化逻辑应该重载有参还是无参的init

    关于开发者在写初始化逻辑的时候,应该选用的哪个init方法@author mzy 在查看servlet的源码的时候,因为servlet是一个接口使用较麻烦: 所以我们使用它的实现类:GenericSe ...

  8. Struts2框架基本使用

    时间:2017-1-6 16:53 修改struts.xml配置文件不需要重启服务器.Struts2框架    一.        *   介绍Struts2        *   关于Struts2 ...

  9. docker安装与配置nginx详细过程

    注:大鸟飞过,此方式只用于快速搭建使用 第一步 pull nginx 命令:docker pull nginx 第二步 启动nginx 命令:docker run --name nginx -p 80 ...

  10. 解锁 VS Code 更多可能性,轻松入门 WebView

    作者:HelloGitHub-小夏 说起 VS Code 大家普遍印象应该都差不多是这样:不就是个编辑器嘛,最主要的还是 coding 的快感咯. 里面很多功能都应该是围绕如何提高 coding 效率 ...