初始化后如何用Style覆盖Foreground属性?

时间:2014-03-25 14:23:07

标签: xaml windows-8 microsoft-metro

所以我的Windows 8应用程序中有一个TextBlock元素,我覆盖了这样的前景色:

TestTextBlock.Foreground = new SolidColorBrush(Color.FromArgb(255,255,0,0));

我想稍后使用具有不同前景色的样式覆盖此颜色。式:

<Style TargetType="TextBlock" x:Key="MyStyle">
    <Setter Property="Foreground" Value="Yellow"/>
</Style>

覆盖:

TestTextBlock.Style = (Style) App.Current.Resources["MyStyle"];

现在,如果我首先初始化Foreground属性,这是有效的。好像Foreground优先于Style。事情是一个简化的例子,我无法删除设置Foreground属性的代码行。

还有其他解决方法吗?我尝试设置Foreground = null,但这导致了不可见的文本。

2 个答案:

答案 0 :(得分:0)

您可以根据需要设置默认颜色,然后我个人通过Storyboard运行ColorAnimation;

<Storyboard x:Key="ChangeThatForegroundColor">
   <ColorAnimation Duration="0"
                   Storyboard.TargetName="YourTextBlockName"
                   Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)"
                   To="Yellow" />
</Storyboard>

您可以使用BeginStoryboard method将其关闭。希望这会有所帮助。

答案 1 :(得分:0)

希望这有帮助:它对我有用

 <TextBlock x:Name="TestTextBlock" Text="Hello world"/> 

1)仅使用solidcolorbrush覆盖SolidColorBrush

  void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        TestTextBlock.Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
        TestTextBlock.Foreground = new SolidColorBrush(Colors.Yellow);                       
    }

2)覆盖仅限样式的样式

 <Style x:Key="MyStyle" TargetType="TextBlock" >
    <Setter Property="Foreground" Value="Red"/>
</Style>

<Style x:Key="MyStyle1" TargetType="TextBlock" >      
    <Setter Property="Foreground" Value="Yellow"/>
</Style>

  void MainPage_Loaded(object sender, RoutedEventArgs e)
    {          
        TestTextBlock.Style = (Style)App.Current.Resources["MyStyle"];
        TestTextBlock.Style = (Style)App.Current.Resources["MyStyle1"];            
    }