原文 WPF: 针对Windows 8优化菜单栏和工具栏

返回目录

1. 关于菜单图标大小

也就是MenuItem中的Icon属性问题。

在.NET 4.x下,无论Icon的大小是什么样的,图标总会遵循菜单的大小:

而在.NET 3.x下,如果不进行缩放,Icon会保持原图片大小,如下图:

因此为了在.NET 3.x中显示正常大小的图标,需要在声明Image时设置它的大小,这个大小本来在.NET 4.x中是不会影响图标实际大小的。

但是新的问题来了,如果程序运行在Windows 8下,图标会去应用这个大小,但是图标本身不会根据菜单实际大小而进行缩放,比如把图片大小设置成25,结果会是这样:

可以看到,Image本身大小会是25,但是却被因菜单大小而被裁掉(即便是设置Image的Stretch属性为Fill也不会起作用)。这个问题已经引起的许多开发者的注意,参考这个BUG汇报

所以,为了能在.NET 3.x,和.NET 4.x + Windows 8环境下正确显示MenuItem的图标大小,请设置Image大小为菜单图标的标准大小:16 * 16!

返回目录

2. 关于IsEnabled和工具栏图标

当菜单中的MenuItem的IsEnabled为False后,MenuItem的图标颜色会变淡。

但是工具栏中的按钮图片不会这样,可以手动通过Style的Trigger来判断IsEnabled属性,如果为False的话,设置Opacify属性。

比如这样:

<Style TargetType="Image">

<Setter Property="Width" Value="27"/>

<Setter Property="Height" Value="27"/>

<Style.Triggers>

<Trigger Property="IsEnabled" Value="False">

<Setter Property="Opacity" Value="0.5" />

</Trigger>

</Style.Triggers>

</Style>

这样被禁用的按钮就一目了然了:

返回目录

3. 针对.NET 3.x的菜单栏和工具栏外观

在Windows 8下,如果应用程序运行在.NET 3.0或3.5下,那么菜单栏和工具栏会是这个样子:

菜单栏背景色是渐变的,工具栏背景色是纯白。和Windows 8的风格有些不搭配。

解决方案是最好设置app.config,使针对.NET 3.x的应用程序可以运行在Windows 8中默认的.NET 4.5环境下,这样设置app.config:

<?xmlversion="1.0" encoding="utf-8"?>

<configuration>

<startup>

<!-- 支持.NET 4.0/4.5 -->

<supportedRuntimeversion="v4.0"/>

<!-- 支持.NET 3.0/3.5 -->

<supportedRuntimeversion="v2.0.50727"/>

</startup>

</configuration>

OK,完成后再次运行程序,这样看起来就更有Windows 8的感觉了。

作者:Mgen
出处:www.cnblogs.com/mgen

其他参考页面:我的软件和工程博客导读

WPF: 针对Windows 8优化菜单栏和工具栏的更多相关文章

  1. WPF的菜单栏,工具栏的简单使用

    1. 界面效果如下: 2. 页面 .xaml代码如下: <Window x:Class="MenuAndToolBar.MainWindow" xmlns="htt ...

  2. 使用C#创建自定义背景色/形状的菜单栏与工具栏

    C#对于菜单栏与工具栏都提供了统一的背景色,形状的渲染类,即ToolStripRenderer类,同时根据不同的情形,提供了多个继承类,分别是ToolStripProfessionalRender,T ...

  3. windows tomcat 优化

    windows tomcat 优化 1.  tomcat conf server.xml 在server.xml中修改以一部分,增加节点数目,可以很好的提高性能: <Connector port ...

  4. WPF、Windows Forms和Silverlight间的联系和区别(转)

    WPF.Windows Forms和Silverlight间的联系和区别http://blog.csdn.net/bitfan/article/details/6128391 .NET Windows ...

  5. [ZETCODE]wxWidgets教程四:菜单栏和工具栏

    本教程原文链接:http://zetcode.com/gui/wxwidgets/menustoolbars/ 翻译:瓶哥 日期:2013年11月28日星期四 邮箱:414236069@qq.com ...

  6. Qt 学习之路 :菜单栏、工具栏和状态栏

    在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...

  7. 三、PyQt5不同方法创建菜单栏、工具栏和状态栏

    创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...

  8. QT学习之菜单栏与工具栏

    QT学习之菜单栏与工具栏 目录 简单菜单栏 多级菜单栏 上下菜单栏 工具栏 简单菜单栏 程序示例 from PyQt5.QtWidgets import QApplication, QMainWind ...

  9. Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)

    例子:状态栏.菜单栏和工具栏 import sys from PyQt4 import QtGui class Example(QtGui.QMainWindow): def __init__(sel ...

随机推荐

  1. char[]转换成wchar_t的转换方法(GNU Libc规定wchar_t为32位)

    wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码.unicode编码的字符一般以wchar_t类型存储. ...

  2. 定位CPU高的方法

    CPU占用高,最常见的原因是死循环或者类死循环的操作,如果要逐一排查代码,费时费力,可以先用工具 工具1.windbg,windows出品的牛刀一枚以管理员运行windbg,File->Atta ...

  3. Spring Boot普通类调用bean

    1 在Spring Boot可以扫描的包下 假设我们编写的工具类为SpringUtil. 如果我们编写的SpringUtil在Spring Boot可以扫描的包下或者使用@ComponentScan引 ...

  4. php 前台数据显示

    <pre name="code" class="html"> public function show(){ echo "访问了index ...

  5. HDU 1290 献给杭电五十周年校庆的礼物

    题解:http://www.cnblogs.com/forever97/p/3522238.html #include <cstdio> int main() { int n; while ...

  6. C#引用非托管.dll

    C#里调用非托管的Dll 今天花了一些精力来调查了一下C#里调用非托管的Dll,C#里调用非托管的Dll要使用P/Invoke平台调用技术, 这里先简单介绍一下P/Invoke平台调用技术.    由 ...

  7. PHP中用到的一些字符串函数

    /*常用的字符串输出函数   *   * echo()   输出字符串   * print()  输出一个或多个字符串   * die()  输出一条信息,并退出当前脚本   * printf()  ...

  8. Android高斯模糊

    传送门 github地址:http://developer.android.com/guide/topics/renderscript/compute.html: https://github.com ...

  9. Android手机之间通过声音传输信息方法——声波通信(含project代码)

    大家可能都用过支付宝的声波支付.即两个终端同一时候打开该功能,一个终端作为发送端send,一个终端作为接收端get,send将本终端上发出的请求信息依照约定规则的算法进行声音编码,并播放出来,get端 ...

  10. CSS的float与clear

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...