0

我正在开发一个具有默认黑色背景和白色文本颜色的 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>

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

任何有关这方面的帮助或信息将不胜感激。

4

3 回答 3

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);
于 2013-11-01T11:28:22.133 回答
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>
于 2013-11-01T11:44:40.407 回答
0

最简单的方法是使用和元素的Foreground属性。您所要做的就是为元素命名,如果它是预定义的(在 XAML 中,就是它),Visual Studio 将自动为它创建一个对象。假设元素的名称在您的 XAML 文件中。你所要做的就是写下这行:TextBlockTextBoxtextBlock

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

希望有帮助。

于 2015-02-27T19:31:48.720 回答