【问题标题】:WP7]Dynamic Color for theme awareness OR How to define a dynamic value for a property in a custom resource in App.xaml?WP7]主题意识的动态颜色或如何在 App.xaml 的自定义资源中定义属性的动态值?
【发布时间】:2010-10-16 06:34:59
【问题描述】:

我正在为 Windows Phone 7 制作应用程序(使用 Visual Studio 2010 Express for Windows Phone RTM),但我在主题(明暗)意识方面遇到了一些问题,尤其是在颜色方面。

基本上,当使用静态资源颜色/画笔时,我想做与手机内部相同的事情。 例如,如果我声明:

<Border Background="{StaticResource PhoneBackgroundBrush}" />

边框将具有带有深色主题的黑色背景和带有浅色主题的白色背景。 所以,我想拥有一个资源……比如说 MyBackgroundBrush,它的用途如下:

<Border Background="{StaticResource MyBackgroundBrush}" />

而且,它可能会有深色主题为蓝色,浅色主题为红色。

所以我的问题是,我该如何定义这样的资源和行为?

【问题讨论】:

    标签: silverlight windows-phone-7


    【解决方案1】:

    看到这个question about theme detection。这将为您提供一种检测主题的方法,然后使用该信息通过在应用程序的资源中替换它来设置您的背景画笔:

    App.Current.Resources.Remove("MyPhoneBrush");
    App.Current.Resources.Add("MyPhoneBrush", value);
    

    您可以在 xaml 中使用名称定义这两个彩色画笔,然后将其中一个或另一个设置为 MyPhoneBrush 的运行时值。您可能希望将其中一个设置为默认值,以便在设计时也能正常工作...

    【讨论】:

    • 感谢您的回答。我想我理解这个想法,但我现在无法测试它。我应该在哪里声明您的代码?它会在 App.xaml.cs 中工作,像这样:this.Current.Resources.Add("MyPhoneBrush", value);?
    • App.Current 是静态的,因此您应该能够将该代码放在几乎任何地方。如果您基于标准模板之一,您可以将其放在 MainPage_Loaded 中,其中(取决于项目)应该已经有代码引用 App。
    • 谢谢,我刚刚让它工作了。需要注意的一件事是,这可能是由于我的基本实现,但在声明代码的位置很重要。例如,我在 App.xaml 中有一个 texblock 样式定义。然后我在 App.xaml.cs->Application_Launching(s,e) 中声明了您的代码。之后,我将我的风格中的 Foreground 属性更改为静态资源,但没有工作,因为(我猜)App.Xaml 在添加资源之前被解析。尽管如此,我还是通过使用静态资源直接在文本块中覆盖前景来让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2016-12-31
    相关资源
    最近更新 更多