【问题标题】:Set Control Styles to ThemeResource Values Programmatically In Windows Phone 8.1在 Windows Phone 8.1 中以编程方式将控件样式设置为 ThemeResource 值
【发布时间】:2015-04-09 22:43:11
【问题描述】:

我正在我的 Windows Phone 8.1 应用程序中动态添加一些控件。在XAML中,你可以为当前主题的样式设置各种样式,就像我在下面的例子中设置这个TextBlock控件的foreground属性一样。

<TextBlock Text="Hello World" Foreground="{ThemeResource PhoneAccentBrush}" />

我希望能够在后面的代码中做同样的事情,但还不能确定如何做到这一点。我以编程方式创建 TextBlock,如下所示。

TextBlock textBlock = new TextBlock() {
    Text = "Hello World",
    Foreground = // Need to get phone accent brush from theme
};

我见过不同主题值存储如下的示例,但是当我检查主题资源时,此字典似乎不包含任何键。

SolidColorBrush phoneAccent = new SolidColorBrush((Color)Application.Current.Resources["PhoneAccentColor"]);

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 在运行时更改主题时,Rob 的答案是否有效?
  • 是的,当主题在运行时发生变化时它确实有效。
  • 感谢@tribute2ro,这是一件有趣的事情。我主要使用 Windows 应用程序,因此如果代码中的一次性画笔分配与 XAML 中的 ThemeResource 绑定相同,那么 Win 8.1 和 WP 8.1 之间的主题处理肯定存在显着差异。

标签: c# xaml windows-phone-8.1


【解决方案1】:

从 PhoneAccentBrush 而非 PhoneAccentColor 加载它:

Brush accentBrush = Resources["PhoneAccentBrush"] as Brush;
TextBlock textBlock = new TextBlock()
{
    Text = "Hello World",
    Foreground = accentBrush 
};

【讨论】:

  • 谢谢!我想我只是访问了错误的资源字典。
【解决方案2】:

在 Visual Basic .net 中:

.Foreground = CType(Resources.Item("PhoneAccentBrush"), Brush)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2014-09-10
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多