19

我认为这是一个非常普遍的问题,但我找不到适合我的解决方案。众所周知,WP 支持深色和浅色主题。用户可以更改主题,并且有一些方法可以覆盖他的决定并以您选择的颜色主题显示所有内容。但是,我只是想对这两种主题类型做出反应,我想以正确的颜色显示图标。

如果您使用应用程序栏,您可以从许多内置图标中进行选择,这些图标会自动从浅色变为深色,反之亦然。

为什么不支持普通图像?例如:我想显示一个电话图标。我从内置图标中选择了一个,并将其从 Microsoft SDK 文件夹复制到我项目的 Image 文件夹中。如果用户使用深色主题,一切都会好起来的,因为白色电话图标将在黑色背景上可见。但是如果他切换到浅色主题,图标将不可见,因为它是白底白字。

我完全了解文本框或背景颜色的样式资源,它们使用手机的重音或主题颜色。但为什么不支持我作为图像添加到 XAML 页面的简单图标?

当然,如果用户处于深色或浅色模式,我可以在页面的构造函数中检测到。然后我会加载黑色或白色版本的电话图标。但是每次我访问该页面时都会进行此检查并减慢一切。每次我添加主题感知图像时,手动添加主题检查也很烦人。

有没有只适用于 XAML 的解决方案?或者至少易于维护?为什么我不能从一开始就使用 SDK 中的内置图像?它们已经提供深色和浅色版本,并且已经在应用程序栏中使用。

4

5 回答 5

36

如果您希望图标在操作栏中发挥作用,只需为白色(如果是深色主题)和黑色(如果是浅色主题),那么您可以将图像作为不透明蒙版添加到矩形中,如下所示:

<Rectangle Fill="{StaticResource PhoneForegroundBrush}" Width="48" Height="48" >
    <Rectangle.OpacityMask>
        <ImageBrush ImageSource="/Images/my.icon.png" />
    </Rectangle.OpacityMask>
</Rectangle>

其中 my.icon.png 是白色图像,就像您可以为操作栏选择的图像一样。

于 2012-12-20T18:04:41.867 回答
3

您可以使用矢量图形而不是位图图标,并使用主题感知画笔来绘制它们。

如果您希望应用程序响应主题的切换,您需要以任何方式响应它。

我在返回所选主题的视图的基类中添加了一个属性。这样我就可以使用/绑定到该值。

也可以使用将资源的逻辑名称转换为主题特定资源名称的 ValueConverter。

编辑

看看这个:Windows Phone 7 上的自定义浅色/深色主题资源

于 2012-12-20T13:17:34.223 回答
2

检测主题(我认为支持深色和浅色主题是最好的解决方案),然后相应地设置图像。如果您经常这样做,那么您可以提供两个图像源并使用正确的图像源的自定义控件将很容易创建。

编辑:这是关于这个主题的另一篇好文章。新的屏幕分辨率

于 2012-12-20T15:42:02.917 回答
0

您选择一个白色前景图标使用它。它适用于 Light 和 Dark 主题。这就是我一直在做的。

于 2012-12-20T13:10:40.070 回答
0

Coding 4 Fun控制工具包包括一个模仿应用程序栏按钮的圆形按钮,包括根据主题更新前景色。代码是开源的,所以也许你可以在那里找到答案。或者,作为 hack,您可以使用 RoundButton 控件,关闭边框,并且不提供Click事件。

于 2012-12-20T13:41:58.777 回答