wpf中使用svg图片

news2024/11/25 2:49:02

在wpf中,svg图片不能直接使用,但是我们知道,svg图片比png,jpg等图片都好点,原因就是它是矢量图片,不会变形。

一共4种方式:

第一种:

简单的svg,我们可以使用path来装载它

 <Path   Name="pathTip"   Width="32" Height="32" Stretch="Fill"   />
    pathTip.Data = (Geometry)this.FindResource("MessageOK");   //图标  来源于path文件
    pathTip.Fill = new SolidColorBrush(Colors.Green);  //图标的颜色

这种方式解决不了多个path的问题,也就是复杂的svg,解决不了。 

第二种:

使用SharpVectors开源的库,在nuget中,直接下载使用。

这种可以解决复杂的问题,但是在编译界面中,也就是在xaml文件中,是不显示svg图片的,只有在运行的时候,才能显示。

第三种:

1.先使用此工具进行转换https://download.csdn.net/download/u012563853/87866570

2.拿到xaml中的内容,放到资源文件中,取名为abc

3.使用

4.代码

<Window x:Class="WpfApp7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp7"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <DrawingGroup x:Key="abc" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
            <DrawingGroup>
                <DrawingGroup.ClipGeometry>
                    <RectangleGeometry Rect="0,0,48,48" />
                </DrawingGroup.ClipGeometry>
                <GeometryDrawing>
                    <GeometryDrawing.Pen>
                        <Pen Brush="#FF333333" Thickness="2" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" MiterLimit="1" />
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Geometry>
                        <PathGeometry FillRule="Nonzero" Figures="M8,8L40,40" />
                    </GeometryDrawing.Geometry>
                </GeometryDrawing>
                <GeometryDrawing>
                    <GeometryDrawing.Pen>
                        <Pen Brush="#FF333333" Thickness="2" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" MiterLimit="1" />
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Geometry>
                        <PathGeometry FillRule="Nonzero" Figures="M8,40L40,8" />
                    </GeometryDrawing.Geometry>
                </GeometryDrawing>
            </DrawingGroup>
        </DrawingGroup>
    </Window.Resources>
    <Grid>
        <Image>
            <Image.Source>
                <DrawingImage Drawing="{DynamicResource abc}"/>
            </Image.Source>
        </Image>
    </Grid>
</Window>

第四种:

使用转换器,读取xaml文件

1.依然用这个工具,转换成2.xaml

 

2. xaml代码

注意:图片的路径,以及增加资源中,否则显示不出来

<Window x:Class="WpfApp7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp7"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:DrawingImageConvert x:Key="abc"/>
    </Window.Resources>
    <Grid>
        <Image Height="50" Width="50">
            <Image.Source>
                <DrawingImage Drawing="{Binding Converter={StaticResource abc},ConverterParameter='pack://application:,,,/WpfApp7;component/2.xaml'}"/>
            </Image.Source>
        </Image>
    </Grid>
</Window>

3.转换器

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Resources;

namespace WpfApp7
{
    public class DrawingImageConvert : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Uri uri = new Uri(parameter.ToString(),UriKind.RelativeOrAbsolute);
            StreamResourceInfo info=Application.GetResourceStream(uri); 
            XamlReader reader = new XamlReader();
            return reader.LoadAsync(info.Stream) as DrawingGroup;

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
    }
}

4.效果

 

综上所述,从操作简单,功能最全来说,建议使用第四种,最起码图片转成xaml,不用复制了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/613308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法与数据结构(三)

一、堆 1&#xff0c;堆结构就是用数组实现的完全二叉树结构 根节点的左孩子的下标为&#xff1a;2i1,右孩子为2i2。两个孩子的父节点为(i-1)/2向下取整 2&#xff0c;完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 从下往上将孩子与父节点进行比较&#xff0c;如果子叶…

【Docker】什么是Docker,它用来干什么

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

使用Leangoo轻量敏捷看板工具实现多泳道任务管理

在敏捷开发的实践当中&#xff0c;通过可视化的敏捷任务看板来实现团队协同和透明化管理是必不可少的一个实践。 通过可视化的敏捷任务看板我们可以达到如下几个目的&#xff1a; 1. 可视化管理团队的目标; 2. 明确目标的优先级; 3. 明确目标分解后的任务项; 4. 可视化管理任…

【算法题解】34. 二叉树的最小深度

这是一道 简单 题 https://leetcode.cn/problems/minimum-depth-of-binary-tree/ 文章目录 题目简单递归解法Java 代码实现Go 代码实现复杂度分析 DFSJava 代码实现Go 代码实现复杂度分析 BFSJava 代码实现Go 代码实现复杂度分析 总结 题目 给定一个二叉树&#xff0c;找出其最…

第十一届蓝桥杯国赛JavaB组题解

A. 美丽的2 思路&#xff1a; 枚举 1 到 2020 的每个数&#xff0c;依次判断即可。 代码&#xff1a; public class Main {public static boolean check(int x) {while (x ! 0) {if (x % 10 2) return true;x / 10;}return false;}public static void main(String[] args) …

CPU和微程序

目录 一、CPU功能和结构 &#xff08;一&#xff09;CPU的功能 1. 指令控制 2. 操作控制 3. 时间控制 4. 数据加工 5. 中断处理 &#xff08;二&#xff09;CU和ALU的功能 1. CU&#xff08;控制器&#xff09;的功能 2. ALU&#xff08;运算器&#xff09;的功能 …

Greenplum高并发数据库概览

一、前言 GreenPlum DB&#xff08;GPDB&#xff09;是一个开源的高并发(MPP&#xff1a;massively parallel processing ) 数据处理平台&#xff0c;可用于海量数据分析&#xff0c;机器学习&#xff0c;AI场景&#xff0c;专为下一代数据仓库和大规模分析处理设计。 参考&am…

008-从零搭建微服务-系统服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【ArcGIS Pro二次开发】(33):合并文件夹下的所有shp文件

在工作中&#xff0c;即使很不喜欢用shp文件&#xff0c;但还是经常会收到shp格式的文件。关于shp文件的吐糟就不多说了&#xff0c;除了文件小、字段名长度限制&#xff0c;不能储存弧线段等问题&#xff0c;还有一种处理方式也让人很是难受。 如上图&#xff0c;有些shp文件是…

挂起、激活单个流程实例

类&#xff1a;com.roy.ActivitiBusinessDemo/*** 挂起、激活单个流程实例*/Testpublic void suspendSingleProcessInstance(){ // 1、获取流程引擎ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); // 2、RuntimeServiceRuntimeService…

Flowable开始事件-空开始事件

文章目录 空开始事件一、开始事件的定义1、图形标记2、XML内容3、使用示例 总结 空开始事件 利用空开始事件发起流程 一、开始事件的定义 空开始事件意味着没有指定启动流程实例的触发条件。它是最常见的一种开始事件&#xff0c;一般需要人工启动或通过api启动 1、图形标记…

最系统的网络安全自学笔记+学习路线(超详细)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

职场工作的前提

职场工作 目录概述需求&#xff1a; 设计思路实现思路分析1.职场工作 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

自动攻丝机(比例随动控制应用)

比例随动控制的详细介绍,可以参看下面的文章链接: 运动控制比例随动系统_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速计数为例来…

数据库期末复习(9.1)故障恢复到检查点之前

故障的分类 事务故障 系统故障 存储介质故障 只能通过故障来实现. 故障恢复 缓冲池策略 STEAL和FORCE策略:具体内容见课件。 为啥要使用steal和force两种策略 原因&#xff1a;如果不用steal策略 缓冲区就会有大量的脏页&#xff0c;如果使用not force策略 由于对同一个对…

R语言多线程提高计算速度,如何使用foreach包加速并行计算

R语言多线程加速 通常情况下&#xff0c;R语言只能使用一个线程来进行计算&#xff0c;因此计算的速度及其感人&#xff01; 最近刚好有一个需求&#xff1a;我有一个参考数据表&#xff0c;里面存放了30万条基因的名称和位置信息&#xff0c;现在我想从里面找到指定的6000个基…

C++程序员的待遇怎么样?我来谈谈学好C++的五个关键点

有个学弟跟我谈到这样一个问题&#xff1a;现在我看到网上很多人都在讲&#xff0c;说这个做C程序员&#xff0c;尤其是本科毕业计算机专业&#xff0c;然后步入社会之后就能拿到月入过万。但是为什么自己找的这个工作啊&#xff0c;普遍在月薪六七千块钱左右&#xff0c;也就是…

一图看懂 werkzeug 模块:是一个全面的WSGI web应用程序库,最先进的WSGI实用程序库之一,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 werkzeug 模块&#xff1a;是一个全面的WSGI web应用程序库&#xff0c;最先进的WSGI实用程序库之一&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;…

强连通分量-tarjan算法缩点

一. 什么是强连通分量&#xff1f; 强连通分量&#xff1a;在有向图G中&#xff0c;如果两个顶点u,v间&#xff08;u->v&#xff09;有一条从u到v的有向路径&#xff0c;同时还有一条从v到u的有向路径&#xff0c;则称两个顶点强连通(strongly connected)。如果有向图G的每…

Linux - 第24节 - Linux高级IO(二)

1.I/O多路转接之select 1.1.select初识 select是系统提供的一个多路转接接口。 • select系统调用可以让我们的程序同时监视多个文件描述符的上的事件是否就绪。 • select的核心工作就是等&#xff0c;当监视的多个文件描述符中有一个或多个事件就绪时&#xff0c;select才会…