Windows phone 7 Windows Phone 8中的自动暗/亮图标支持

Windows phone 7 Windows Phone 8中的自动暗/亮图标支持,windows-phone-7,windows-phone-8,windows-phone,Windows Phone 7,Windows Phone 8,Windows Phone,我认为这是一个非常普遍的问题,但我找不到适合我的解决方案。大家都知道,WP支持黑暗和光明主题。用户可以更改主题,有多种方法可以覆盖他的决定,并以您选择的颜色主题显示所有内容。然而,我只是尝试对这两种主题类型做出反应,我希望以正确的颜色显示图标 如果您使用应用程序栏,您可以从许多内置图标中进行选择,这些图标将自动从亮转暗,反之亦然 为什么不支持普通图像?例如:我想显示一个电话图标。我从内置图标中选择了一个,并将其从MicrosoftSDK文件夹复制到项目的Image文件夹中。如果用户使用黑色主题,

我认为这是一个非常普遍的问题,但我找不到适合我的解决方案。大家都知道,WP支持黑暗和光明主题。用户可以更改主题,有多种方法可以覆盖他的决定,并以您选择的颜色主题显示所有内容。然而,我只是尝试对这两种主题类型做出反应,我希望以正确的颜色显示图标

如果您使用应用程序栏,您可以从许多内置图标中进行选择,这些图标将自动从亮转暗,反之亦然

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

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

当然,我可以在页面的构造器中检测用户是处于黑暗模式还是光明模式。然后,我将加载电话图标的黑色或白色版本。但是每次我访问页面时都会执行此检查,这会减慢速度。每次添加主题识别图像时,手动添加主题检查也很烦人


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

您可以选择一个白色的前景图标来使用它。它既适合浅色主题,也适合深色主题。这就是我一直在做的。

您可以使用矢量图形而不是位图图标,并使用具有主题意识的画笔来绘制它们

如果你想让应用程序响应主题的切换,你需要以任何方式响应它

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

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

编辑

看看这个:

控件工具包包括一个圆形按钮,模仿应用程序栏按钮,包括根据主题更新前景色。代码是开源的,因此您可能会在其中找到答案。或者,作为黑客,您可以使用RoundButton控件,关闭边框,而不提供
单击事件。

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


编辑:这是关于这个主题的另一篇好文章

如果您希望图标的功能与actionbar中的类似,只需使用白色(如果为深色主题)和黑色(如果为浅色主题),则可以将图像作为不透明度遮罩添加到矩形中,如下所示:



其中my.icon.png是白色图像,就像你可以为actionbar选择的图像一样。

可能重复的是,我也看到了这个问题,但我想避免使用opacityMask和定义每个按钮状态(如果我将图像用作可点击的)的解决方案,嗯?如果你在白色背景上使用白色图标,你将看不到任何东西。。。白色图标后面必须至少有浅灰色背景才能看到任何东西,否则控件将太低。我不想创建新图形,因为内置图形对我来说已经足够了。但我已经看到了如何在xaml中创建矢量图形的说明,可以使用它。但这又是太多的工作,尤其是当图形已经存在时:/I我尝试了一个转换器解决方案,但没有成功。但在我看来,这似乎是最实际的解决办法。你能给我一个你是如何在你的视图中解决这个问题的例子吗?我添加了一个非常有用的链接,允许你将明暗资源放在不同的资源文件中并加载它们。我尝试了一下你的链接,但我一直在添加ThemeResourceDictionary。要么它不存在于名称空间中,要么“每个字典条目都必须有一个关联的键”。@MarkusRudel-用这么少的信息很难调试它。在我看来,您以错误的方式添加了资源字典。您是对的,但是注释框中的空间太小了。也许我会在另一个问题中问这个问题。正如我在最初的问题中所写的:我正在寻找一种解决方案,它不需要决定应该加载和分配什么图像的代码。它是一个程序。一切都需要代码必要的代码可以很容易地包装在XAML标记可重用的东西中。我是这么建议的。是的,那是对的,但我希望尽可能接近原始的类和功能。当然,可以编写自己的控件来满足您的需求,但我一直在寻找一个简单的解决方案,如Johan Falk建议的:)我仍然无法理解为什么只有文本和应用程序栏图标的主题支持,而不是整个系统。就是这样!最小的努力和最大的结果:)虽然我认为OpacityMask方法会更复杂,但它似乎只适合于黑白图标。矩形和不透明材质的组合是否可以用于单个样式定义?我想创建一个单一的风格,可以在整个应用程序中使用我使用的所有图标。另一个问题:不同颜色的图像呢?那我就和Erno一起去