原文 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. Anatomy of a Program in Memory

    Memory management is the heart of operating systems; it is crucial for both programming and system a ...

  2. sed 文件查找,替换

    sed 命令查找与替换: (1)删除第2,3行:sed '2,3d' test.txt > new.txt (2)替换:  替换所有:sed 's/abc/ABC/' test.txt > ...

  3. JAVA GUI学习 - JInternalFrame浮动窗口:可拖拽窗口(依赖于父窗口)

    public class JInternalFrameKnow extends JInternalFrame { public JInternalFrameKnow() { this.setBound ...

  4. Linux系统服务 1 ---- rSyslog日志服务

    1 日志 1 日志是系统用来记录系统运行时候的一些相关的信息的纯文本文件 2 日志的目的是保存相关程序的运行状态,错误信息等.为了对系统进行分析,保存历史记录以及在出现错误的时候发现分析错误使用 3 ...

  5. 框架技术--Spring自动加载配置

    今天项目中遇到一个问题,一个方法在服务启动后会自动被执行,查看了下配置未发现有定时的配置.但是后来发现是spring配置了启动时默认加载了方法. 代码: <?xml version=" ...

  6. 小编辑 Java 中十进制和十六进制的相互转换

    1 2 3 4 5 // 十进制转化为十六进制,结果为C8. Integer.toHexString(200);   // 十六进制转化为十进制,结果140. Integer.parseInt(&qu ...

  7. iOS内存管理 ARC与MRC

    想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...

  8. An Introduction to Interactive Programming in Python

    这是在coursera上面的一门学习pyhton的基础课程,由RICE的四位老师主讲.生动有趣,一共是9周的课程,每一周都会有一个小游戏,经历一遍,对编程会产生很大的兴趣. 所有的程序全部在老师开发的 ...

  9. BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )

    tarjan求边双连通分量, 然后就是一棵树了, 可以各种乱搞... ----------------------------------------------------------------- ...

  10. UNIX/Linux进程间通信IPC---管道--全总结(实例入门)

    管道 一般,进程之间交换信息的方法只能是经由fork或exec传送打开文件,或者通过文件系统.而进程间相互通信还有其他技术——IPC(InterProcessCommunication) (因为不同的 ...