WPF: 针对Windows 8优化菜单栏和工具栏_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF: 针对Windows 8优化菜单栏和工具栏

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

 2013/12/13 3:09:08  _Mgen  博客园  我要评论(0)
  • 摘要:目录1.关于菜单图标大小2.关于IsEnabled和工具栏图标3.针对.NET3.x的菜单栏和工具栏外观 返回目录1.关于菜单图标大小也就是MenuItem中的Icon属性问题。在.NET4.x下,无论Icon的大小是什么样的,图标总会遵循菜单的大小:而在.NET3.x下,如果不进行缩放,Icon会保持原图片大小,如下图:因此为了在.NET3.x中显示正常大小的图标,需要在声明Image时设置它的大小,这个大小本来在.NET4.x中是不会影响图标实际大小的。但是新的问题来了
  • 标签:Windows 工具 菜单 优化

目录

  • 1. 关于菜单图标大小
  • 2. 关于IsEnabled和工具栏图标
  • 3. 针对.NET 3.x的菜单栏和工具栏外观

 

返回目录

1. 关于菜单图标大小

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

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

image

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

image

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

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

image

可以看到,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>

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

image

 

返回目录

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

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

image

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

 

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

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <startup>

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

    <supportedRuntime version="v4.0"/>

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

    <supportedRuntime version="v2.0.50727"/>

  </startup>

</configuration>

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

image

发表评论
用户名: 匿名