有人可以描述推荐的逐步程序吗?
编辑:
步骤1。将SVG转换为XAML ......很容易
第二步。现在怎么样?
答案 0 :(得分:118)
您的技术将取决于您的SVG到XAML转换器产生的XAML对象。它会产生绘图吗?一个图像?一个网格?帆布?一条路径?几何?在每种情况下,您的技术都会有所不同。
在下面的示例中,我假设您在按钮上使用了您的图标,这是最常见的情况,但请注意,相同的技术适用于任何ContentControl。
使用绘图作为图标
要使用绘图,请使用DrawingBrush绘制一个大小合适的矩形:
<Button>
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<Drawing ... /> <!-- Converted from SVG -->
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Button>
将图片用作图标
可以直接使用图像:
<Button>
<Image ... /> <!-- Converted from SVG -->
</Button>
将网格用作图标
可以直接使用网格:
<Button>
<Grid ... /> <!-- Converted from SVG -->
</Button>
如果您需要控制尺寸,可以将其包含在Viewbox中:
<Button>
<Viewbox ...>
<Grid ... /> <!-- Converted from SVG -->
</Viewbox>
</Button>
将画布用作图标
这就像使用图像或网格一样,但由于画布没有固定的大小,您需要指定高度和宽度(除非这些已经由SVG转换器设置):
<Button>
<Canvas Height="100" Width="100"> <!-- Converted from SVG, with additions -->
</Canvas>
</Button>
将路径用作图标
您可以使用路径,但必须明确设置笔触或填充:
<Button>
<Path Stroke="Red" Data="..." /> <!-- Converted from SVG, with additions -->
</Button>
或
<Button>
<Path Fill="Blue" Data="..." /> <!-- Converted from SVG, with additions -->
</Button>
将几何图形用作图标
您可以使用路径绘制几何体。如果它应该被抚摸,请设置描边:
<Button>
<Path Stroke="Red" Width="100" Height="100">
<Path.Data>
<Geometry ... /> <!-- Converted from SVG -->
</Path.Data>
</Path>
</Button>
或如果应填写,请设置填充:
<Button>
<Path Fill="Blue" Width="100" Height="100">
<Path.Data>
<Geometry ... /> <!-- Converted from SVG -->
</Path.Data>
</Path>
</Button>
如何绑定数据
如果你正在做SVG - &gt;代码中的XAML转换并希望使用数据绑定显示生成的XAML,请使用以下方法之一:
绑定绘图:
<Button>
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush Drawing="{Binding Drawing, Source={StaticResource ...}}" />
</Rectangle.Fill>
</Rectangle>
</Button>
绑定图像:
<Button Content="{Binding Image}" />
绑定网格:
<Button Content="{Binding Grid}" />
在视箱中绑定网格:
<Button>
<Viewbox ...>
<ContentPresenter Content="{Binding Grid}" />
</Viewbox>
</Button>
绑定画布:
<Button>
<ContentPresenter Height="100" Width="100" Content="{Binding Canvas}" />
</Button>
绑定路径:
<Button Content="{Binding Path}" /> <!-- Fill or stroke must be set in code unless set by the SVG converter -->
绑定几何:
<Button>
<Path Width="100" Height="100" Data="{Binding Geometry}" />
</Button>
答案 1 :(得分:36)
我找到了在WPF中使用svg图标的最佳方法。我使用sharpvector框架:
Install-Package SharpVectors
所以我的XAML如下:
<UserControl ...
xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
...>
...
<svgc:SvgViewbox Margin="5" Height="20" Width="20" Stretch="Uniform" Source="/View/Resources/Icons/Connection.Closed.Black.svg"/>
...
</UserControl>
答案 2 :(得分:5)
Windows 10 Creators Update(15063)本身支持SVG图像,但有一些问题。
使用就像将Source
的{{1}}设置为SVG的路径一样简单。这相当于使用<Image />
,如下所示:
SvgImageSource
但是,SVG图像以这种方式加载(通过XAML)may load jagged/aliased。一种解决方法是指定<Image>
<Image.Source>
<SvgImageSource UriSource="Assets/svg/icon.svg" />
</Image.Source>
</Image>
或RasterizePixelHeight
值为双倍+实际高度/宽度:
RasterizePixelWidth
这可以通过在基本图片的<SvgImageSource RasterizePixelHeight="300" RasterizePixelWidth="300" UriSource="Assets/svg/icon.svg" /> <!-- presuming actual height or width is under 150 -->
事件中创建新的SvgImageSource
来动态解决:
ImageOpened
在非高dpi屏幕上可能很难看到别名,但这是试图说明它。
这是上述代码的结果:使用初始var svgSource = new SvgImageSource(new Uri("ms-appx://" + Icon));
PrayerIcon.ImageOpened += (s, e) =>
{
var newSource = new SvgImageSource(svgSource.UriSource);
newSource.RasterizePixelHeight = PrayerIcon.DesiredSize.Height * 2;
newSource.RasterizePixelWidth = PrayerIcon.DesiredSize.Width * 2;
PrayerIcon2.Source = newSource;
};
PrayerIcon.Source = svgSource;
的{{1}},以及使用Image
中创建的SvgImageSource的第二个SvgImageSource
事件:
这是顶部图片的放大视图:
虽然这是底部(抗锯齿,正确)图像的放大视图:
(您需要在新标签页中打开图片并以全尺寸查看,以了解差异)
答案 3 :(得分:3)
您可以将SVG中生成的xaml用作矩形上的绘图画笔。像这样:
<Rectangle>
<Rectangle.Fill>
--- insert the converted xaml's geometry here ---
</Rectangle.Fill>
</Rectangle>
答案 4 :(得分:1)
另一个替代方法是dotnetprojects SVGImage
这允许直接在xaml中本地使用.svg文件。
最令人高兴的是,它只是一个大约100k的组件。与Sharpvector相比,Sharpvector的文件要大得多。
用法:
...
xmlns:svg1="clr-namespace:SVGImage.SVG;assembly=DotNetProjects.SVGImage"
...
<svg1:SVGImage Name="mySVGImage" Source="/MyDemoApp;component/Resources/MyImage.svg"/>
...
仅此而已。
请参阅:
答案 5 :(得分:0)
使用SvgImage或SvgImageConverter扩展,SvgImageConverter支持绑定。 有关演示这两个扩展的示例,请参见下面的链接。
https://github.com/ElinamLLC/SharpVectors/tree/master/TutorialSamples/ControlSamplesWpf
答案 6 :(得分:0)
我们可以直接使用SVG代码中的路径代码:
<Path>
<Path.Data>
<PathGeometry Figures="M52.8,105l-1.9,4.1c ...