xaml - 如何更改应用程序中所有文本的颜色

时间:2013-11-01 11:16:48

标签: xaml windows-phone-8

我正在开发一个带有默认黑色背景和白色文字颜色的Windows Phone 8应用程序。我想在应用程序的每个页面上更改这些颜色。我怎样才能以最简单的方式实现这一目标?

我在App.xaml文件中添加了以下样式,以查看它是否更改了单个页面中所有文本的颜色:

<Style x:Key="DefaultPage" TargetType="phone:PhoneApplicationPage">
        <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
        <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
        <Setter Property="Foreground" Value="Red"/>
        <Setter Property="SupportedOrientations" Value="Portrait"/>
        <Setter Property="Orientation" Value="Portrait"/>
        <Setter Property="shell:SystemTray.IsVisible" Value="True"/>
    </Style>

但它的作用是,它将所有文本的颜色更改为红色,除了具有预定义样式的文本(如标题和应用程序名称)。

对此有任何帮助或信息将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

当下没有Visual Studio。我建议覆盖系统资源。 类似的东西:

((SolidColorBrush)Resources["PhoneBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
((SolidColorBrush)Resources["PhoneTextBoxBrush"]).Color = Color.FromArgb(0xBF, 0xFF, 0xFF, 0xFF);
((SolidColorBrush)Resources["PhoneTextBoxForegroundBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);

答案 1 :(得分:0)

如果您的应用标题定义如下:

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="APP NAME" 
                       Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Page Title" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

页面样式中定义的字体颜色将被PhoneTextNormalStyle覆盖。所以你需要为它创建一个自定义样式:

<Style x:Key="RedPhoneTextNormalStyle" TargetType="{x:Type TextBlock}" 
                              BasedOn="{StaticResource PhoneTextNormalStyle}">
        <Setter Property="Foreground" Value="Red"/>
</Style>

然后您应该将新样式应用于TextBlock

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" 
                       Text="APP NAME" 
                       Style="{StaticResource RedPhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Page Title" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

答案 2 :(得分:0)

最简单的方法是使用ForegroundTextBlock元素的TextBox属性。您所要做的就是为元素命名,如果它是预定义的元素(在XAML中,则为它),Visual Studio将自动为它创建一个对象。我们在XAML文件中说明元素的名称是textBlock。您所要做的就是写下这一行:

textBlock.Foreground = new System.Drawing.SolidBrush(System.Drawing.Color.Red);

,如果您想使用预定义的画笔或

textBlock.Foreground = (Brush) (new System.Windows.Media.BrushConverter()).ConvertFromString("#FF0000")

,如果您想使用您选择的十六进制代码的画笔颜色。这应该可以帮助您以所需的颜色为所需的文本着色。

此外,您可以在<SolidColorBrush Color="#FF0000" x:Name="Red"/>内定义<Page.Resources></Page.Resources>,如下所示:

<Page.Resources> <SolidColorBrush Color="#FF0000" x:Name="Red" /> </Page.Resources>

然后使用SolidColorBrush使用textBlock.Text = Red,只需使用以下内容即可: {{1}},代码中的任何位置。

希望有所帮助。