[Aaronyang] 写给自己的WPF4.5 笔记[3MenuItem中的icon]

敢于尝试,就等于你已经向成功迈出了第一步 --Aaronyang的博客(www.ayjs.net)-www.8mi.me

=============时隔两年后再看WPF==========

因为以前的经验,所以继承FrameworkElement,我就简写继承FWE ,继承UIElement就写继承UIE

后面重头戏就是blend中的开发,不想写的千篇一律。如果期待,左侧有关注按钮。

1. v1.0菜单

新建WPF项目,右键项目-属性-资源

        

导入几个项目用到的图标

第一种:带图标MenuItem指定图标方式

自己在项目里面新建一个文件夹,比如叫icons,然后把图片拷贝进去,Source写法,是相对路径   程序集名称;component/正常路径

 <MenuItem Header="打开">
                    <MenuItem.Icon>
                        <Image Width="16" Height="16" Source="/blend1;component/icons/user_edit.png"/>
                    </MenuItem.Icon>
                </MenuItem>

可视化操作,鼠标放到Image上,按F4设置属性

也可以生成该方式路径

第二种:

使用程序集中的资源,有人说在xaml中不能使用,只能在后台代码,使用wpf pack uri的知识去使用

其实,我们在xaml中可以使用数据绑定的方式使用

但是奇怪的没有用..但是如果是字符串的资源就可以显示出来了,估计这里缺少个值转换器,需要增加一个。

算了吧,假如我们在后台需要怎么写,我们定义这个Image的name为imgHistoryMenu

OK,我们在窗体的Loaded中加载代码:

     private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var imghistoryImage = blend1.Properties.Resources.folder_magnify;
            MemoryStream memory = new MemoryStream();
            imghistoryImage.Save(memory, System.Drawing.Imaging.ImageFormat.Png);
            ImageSourceConverter converter = new ImageSourceConverter();
            ImageSource source = (ImageSource)converter.ConvertFrom(memory);
            imgHistoryMenu.Source = source;
        }

效果:

当然,我真的不想在后台编写任何代码,我只想在xaml中使用..

第三种:也是我最推荐大家用的矢量图标方式,使用Viewbox+Path的方式

   <MenuItem Header="打印">
                    <MenuItem.Icon>
                        <Viewbox Width="16" Height="16">
                            <Path Data="M30.754,48.363001L42.636803,48.363001 42.935001,49.115 30.754,49.115z M21.746382,48.363001L27.137999,48.363001 27.137999,49.115 21.429998,49.115z M20.6849,45.4153L17.523399,51.042898 46.934898,51.042898 43.773399,45.4153 39.369801,45.4153 39.369801,45.790197 22.7057,45.790197 22.8633,45.4153z M18.976601,25.266799C17.4596,25.266799,16.2292,26.4987,16.2292,28.015599L16.2292,37.561098C16.2292,39.079397,17.4596,40.309797,18.976601,40.309797L21.2995,40.309797 43.158798,40.309797 45.4818,40.309797C46.997398,40.309797,48.229198,39.079397,48.229198,37.561098L48.229198,28.015599C48.229198,26.4987,46.997398,25.266799,45.4818,25.266799z M2.7473803,14.789L61.251301,14.789C62.770802,14.789,64,16.019401,64,17.536401L64,42.666498C64,44.184797,62.770802,45.4153,61.251301,45.4153L46.026001,45.4153 50.2878,53.004999 14.1706,53.004999 18.432301,45.4153 2.7473803,45.4153C1.23175,45.4153,0,44.184797,0,42.666498L0,17.536401C0,16.019401,1.23175,14.789,2.7473803,14.789z M48.229,4.7119999L51.174999,4.7119999 51.174999,13.610999 48.229,13.610999z M12.697,4.7119999L15.642,4.7119999 15.642,13.610999 12.697,13.610999z M17.98934,0L46.010761,0C46.987385,0,47.778999,0.79034328,47.778999,1.7669096L47.778999,11.254 16.221001,11.254 16.221001,1.7669096C16.221001,0.79034328,17.012718,0,17.98934,0z" Stretch="Uniform" Fill="#FF5389DF" Width="138" Height="138" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5">
                                <Path.RenderTransform>
                                    <TransformGroup>
                                        <TransformGroup.Children>
                                            <RotateTransform Angle="0" />
                                            <ScaleTransform ScaleX="1" ScaleY="1" />
                                        </TransformGroup.Children>
                                    </TransformGroup>
                                </Path.RenderTransform>
                            </Path>
                        </Viewbox>
                    </MenuItem.Icon>
                </MenuItem>

Viewbox宽和高决定了内部矢量path的大小

当然,你说这个Path我们怎么搞,我推荐使用 Metro Studio 3软件,内部可以选择很多图标,选择图标后,可以生成xaml的代码,嵌入即可使用。

下载:链接:http://pan.baidu.com/s/1dD0B7Vz 密码:qnvz

当然,你也可以使用ai作图,然后做成字体,貌似字体然后可以转换成xaml,当然我以前使用过Blend提供的blend design工具,他跟photoshop很像,但是比它弱很多,但是可以画出基本的path了。

当然也有在线生成xaml图标xaml代码的网站:http://www.thexamlproject.com

好了,时间不早了,我早点睡了,下次再啰嗦吧。

老实承认:这篇文章有点凑自己的任务,文章有点水,因为最近挺忙的,到家后也没什么时间写了,还请见谅。关于路由事件的知识,还在赶。

======安徽六安=========www.ayjs.net==========aaronyang========杨洋========www.8mi.me==========

时间: 2024-08-04 06:08:19

[Aaronyang] 写给自己的WPF4.5 笔记[3MenuItem中的icon]的相关文章

[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton篇 1/4]

我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImageButton 1.0细用慢讲,学会用户控件,依赖属性,属性回调事件 诞生AyImageButton 1.1 支持 控件简单写法,支持自定义AyImageButton写法,提供详细的API 效果图: AyImageButton记录 源码下载:http://pan.baidu.com/s/1eQlHly

[Aaronyang] 写给自己的WPF4.5 笔记13[二维自定义控件技巧-可视化状态实战,自定义容器,注册类命令,用户控件补充]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 博文摘要:欢迎大家来支持我的<2013-2015 Aaronyang的又一总结,牧童遥指纳尼村>绝对好文章 关于<写给自己的WPF4.5 笔记14,已在官网发布> 1.讲解了自定义控件加入命令支持的两种手段,补充用户控件的客户定义模板 2.实战的方式讲解了无外观控件,可以让使用者定义模板,讲解模板PART,使用可视化状态组,动画的使用 效果演示:

[Aaronyang] 写给自己的WPF4.5 笔记[2依赖属性]

人生的意义不在于拿一手好牌,而在于打好一手坏牌 --Aaronyang的博客(www.ayjs.net)-www.8mi.me =============时隔两年后再看WPF========== 因为以前的经验,所以继承FrameworkElement,我就简写继承FWE ,继承UIElement就写继承UIE 后面重头戏就是blend中的开发,不想写的千篇一律.如果期待,左侧有关注按钮. 个人感觉,下面的这张图标比较重要,它或许有些帮助.我看东西只看分析出原理,你就可以拓三返一. Tip: 只

[Aaronyang] 写给自己的WPF4.5 笔记8[复杂数据处理三步曲,数据视图精讲1/3]

真的好累了 ,笑了.做回自己吧       -------------      Aaronyang技术分享 www.ayjs.net 博文摘要: 详细介绍了WPF中视图的种类和开始学之前的准备工作 视图的 分页视图导航 DEMO1 详细讲解了 视图中xaml的声明方式,以及xaml的排序和分组 DEMO2 实例讲解了DataTable的BindingListCollectionView的类似操作 DEMO3 讲解了LINQ中的过滤 Predicate委托,以及过滤的几种方式 讲解了 视图中后台

[Aaronyang] 写给自己的WPF4.5 笔记6[三巴掌-大数据加载与WPF4.5 验证体系详解 2/3]

我要做回自己--Aaronyang的博客(www.ayjs.net) 博客摘要: Virtualizing虚拟化DEMO 和 大数据加载的思路及相关知识 WPF数据提供者的使用ObjectDataProvider 和 XmlDataProvider WPF验证 第一:使用自带的属性SET抛出异常,前台捕捉到异常,描红 第二:我们可以自定义验证规则,替代刚开始的异常捕捉验证 第三:我们可以使用INotifyDataErrorInfo方式,增加异常,并实现了验证通知和还原非法值 第四:我们使用了Er

[Aaronyang] 写给自己的WPF4.5 笔记19[Visual类图文并茂讲解]

文章虽小,内容还好,且看且珍惜. 当界面上使用数千个矢量图形,例如实时统计图,粒子碰撞,比如超级玛丽游戏,图像一直在绘,过量的使用WPF的元素系统和Shape类会使用程序变慢,所以我们需要使用Visual类手动进行渲染. Visual类是很多WPF元素的父类.所以掌握它当然很重要了. Visual的开销小于Geometry小于Path Visual作为抽象类,有UIElement这个子类,也有Viewport3DVisual类(3D知识中的) 放置Visual的对象的容器:ContainerVi

[Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 Ay.Framework.WPF-AyWindow强势预览,点击前往 1. AyArcChart效果图:DEMO下载 2. 使用用法: 新建一个WPF项目AyArcChartDemo,并拷贝AyArcChart用户控件xaml,由于我使用的是Arc控件,所以我们还需要引入Expression的部分dll 2.1 绝佳第一次使用 讲解几个ayarc重要的属性 A

[Aaronyang] 写给自己的WPF4.5 笔记10[层次数据需求处理,TreeView绿色文章1/4]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 AY留言: 文章根据难易,我根据游戏的规则进行了分色,希望读者能选择自己的能力去读.白色<绿色<蓝色<紫色<橙色<红色 博文摘要: 简单的TreeView静态写法,了解展开事件,选中事件 关于磁盘驱动器的图标的获得,文件夹的图标的获得,文件的图标的获得,系统自己shell32.dll的图标的获得(例如我的电脑,回收站等icon) 关于Tre

[Aaronyang] 写给自己的WPF4.5 笔记9[复杂数据处理三步曲,数据展示ListView泪奔2/3]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 作者留言:        小小的推荐,作者的肯定,读者的支持.推不推荐不重要,重要的是希望大家能把WPF推广出去,别让这么好的技术消失了,求求了,让我们为WPF技术做一份贡献.其实写这篇文章时候已经哭了,最近几篇文章,在我个人看来都是wpf的宝藏文章.每天读者也就200-400多人,也说明了WPF的人越来也少了.但是我的Blend教程和WPF控件开发,3D W