包含Wp开发文章-自定义图标XamlIcon
一、前言
1.在之前的自学过程中,当软件需要使用图标时,首先想到的总是下载一张图片作为图标使用,但实际效果会比较模糊。后来在网上了解到字体图标库的用法。我可以在阿里巴巴云矢量图网站把想要的图标添加到项目中,然后打包下载得到ttf图标库,然后用图标作为字体引用。这种方法实现的图标是矢量图,放大缩小不会影响图标的清晰度。
2.但是如果要在使用过程中添加一些新图标,就要下载字体库文件进行替换,有点麻烦。我从我的同事那里学到了另一种方法,它是通过下载svg图标,然后将其更改为xaml的路径来实现的。无需进一步讨论,我将直接介绍实现方法。
二、正文
1.首先,创建一个新项目。项目目录如下所示。在“控件”下,有一个自定义图标控件;在Enums下,有一个用于存储图标名称的枚举变量;在参考资料下,图标用于存储xaml图标。
2.登录阿里巴巴矢量图标库,挑出想要的图标,然后下载对应的svg格式,如下图。
3.下载后选择以文字形式打开,然后找到里面的路径,如下图。复制此部分的路径值,然后在项目目录中的图标下创建一个新的home.xaml文件,将路径粘贴到其中,并修改它以获得我们想要的文件。
home.xaml的代码如下。因为控件XamlIcon继承了Label,所以图标的填充颜色绑定到了“前景”属性。还有一点,记得选择home.xaml文件,打开属性页,将生成操作改为resources。
viewbox xmlns=' http://schemas . Microsoft.com/winfx/2006/xaml/presentation ' xmlns : x=' http://schemas . Microsoft.com/winfx/2006/xaml '
网格宽度='1025 '高度='1024 '
路径数据=' M867.2672 561.792 c-81.216-66.496-162.048-133.376-243.072-200.128 c 586.9472 331.008 549.6992 300.352 512.3872 269.568 c-3.264 2.368-6.006192-286.976 c 877.7632 574.592 874.8832 568.128 867.2672 561.792 z ' Fill=' { Binding Path=forecast,relative source={ relative source AncestorType={ x 3360 type Label } } } '/
路径数据=' m 1009.7312 495.808 c-38.08-31.68-75.776-63.808-114.56-94.592-13.184-10.432-18.24-21.12-18.048-38.208 1.024-76.608 0.512-153.28 0.0
5.168-4.0288 511.04-4.6688 519.04 11.5232 538.24c9.28 11.008 18.432 22.08 27.712 33.088 13.888 16.448 23.04 17.28 39.552 3.456 108.864-90.816 217.728-181.76 326.656-272.576C440.7712 272.704 476.2272 243.2 512.0032 213.376c35.712 29.76 70.848 59.008 105.92 88.256 109.184 91.136 218.432 182.272 327.616 273.408 16.32 13.632 25.408 12.672 39.424-3.968 9.536-11.328 19.008-22.72 28.544-34.048C1028.4192 519.296 1027.6512 510.72 1009.7312 495.808z" Fill="{Binding Path = Foreground, RelativeSource = { RelativeSource AncestorType ={ x:Type Label } }}" /
/Grid
/Viewbox
4、接着在Icons枚举变量中加入新增的图标名称,图标资源的加载是通过枚举的名称来加载的,所以枚举变量的定义记得对应上对应的xaml文件名称。
namespace XamlIconDemo.Enums { public enum Icons { None, home, } }
5、接着编写XamlIcon.cs的代码,如下
public class XamlIcon : Label { Dictionarystring, Viewbox globalIcon = new Dictionarystring, Viewbox(); public Icons Icon { get { return (Icons)GetValue(IconProperty); } set { SetValue(IconProperty, value); } } public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(Icons), typeof(XamlIcon), new FrameworkPropertyMetadata(Icons.None, FrameworkPropertyMetadataOptions.AffectsArrange, new PropertyChangedCallback(IconChangedCallback))); public override void OnApplyTemplate() { base.OnApplyTemplate(); ReferenControls(); } public XamlIcon() { this.VerticalContentAlignment = VerticalAlignment.Center; this.HorizontalContentAlignment = HorizontalAlignment.Center; this.Padding = new Thickness(0); this.Margin = new Thickness(0); } private static void IconChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as XamlIcon).ReferenControls(); } public void ReferenControls() { if (Icon == Icons.None) { this.Content = null; return; } var iconStr = Icon.ToString(); var key = $"/XamlIconDemo;component/Resources/Icons/{iconStr}.xaml"; if (globalIcon.ContainsKey(key)) { this.Content = globalIcon[key]; } else { StreamResourceInfo info = Application.GetResourceStream(new Uri(key, UriKind.Relative)); using (var stream = info.Stream) { Viewbox page = (Viewbox)XamlReader.Load(info.Stream); this.Content = page; globalIcon.Add(key, page); } } } }
6、到这里自定义图标控件就基本完成了,接着测试是否可用,在主页添加自定义的控件
Window x:Class="XamlIconDemo.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:ctls="clr-namespace:XamlIconDemo.Controls" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:XamlIconDemo" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Grid StackPanel Orientation="Horizontal" HorizontalAlignment="Center" ctls:XamlIcon Icon="home" Height="50" Width="50" Foreground="Green" Margin="20"/ ctls:XamlIcon Icon="home" Height="100" Width="100" Foreground="Red" Margin="20"/ ctls:XamlIcon Icon="home" Height="200" Width="200" Foreground="Blue" Margin="20"/ /StackPanel /Grid /Window
7、运行结果如下,可以看到图标已经成功显示出来了,并可以随意修改大小和填充色
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154979.html