2015-09-15 1 views
4

Je suis en train de changer la couleur de la TextDecoration cette façon:Comment changer la couleur TextDecoration dans WPF TextBlock?

<Grid Background="{x:Null}" 
     Margin="10,0,10,0"> 
    <TextBlock Text="{Binding Value}" 
       VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       Style="{StaticResource SWMRegularTextBlockStyle}" 
       Margin="0" 
       FontSize="{DynamicResource RegularFontSize}" 
       x:Name="tb" /> 
     <Line VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       Visibility="{Binding InStock, Converter={StaticResource ReverseBooleanToVisiblity}}" 
       Stroke="Red" 
       Margin="0" 
       StrokeThickness="2" 
       X1="1" 
       Stretch="Fill" 
       Width="{Binding ActualWidth, ElementName=tb, UpdateSourceTrigger=PropertyChanged}" /> 
</Grid> 

Mais quand Text a deux lignes, il échoue. S'il vous plaît aidez-moi à changer la couleur de TextDecoration. Merci d'avance.

REMARQUE: Je souhaite utiliser la ligne d'avant-plan et de barrage TextBlock dans différentes couleurs.

Répondre

12

Je pense que c'est ce que vous recherchez.

<TextBlock Text="{Binding Value}" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{StaticResource SWMRegularTextBlockStyle}" Margin="0" FontSize="{DynamicResource RegularFontSize}" x:Name="tb" > 
    <TextBlock.TextDecorations> 
      <TextDecoration Location="Strikethrough"> 
       <TextDecoration.Pen> 
        <Pen Brush="Red" /> 
       </TextDecoration.Pen> 
      </TextDecoration> 
     </TextBlock.TextDecorations> 
    </TextBlock> 
</TextBlock > 
+0

Exactement ce que je viens de chercher. –

0

Le problème que vous avez est que vous superposez une ligne sur le texte. Lorsque le texte se termine, vous devez créer une autre ligne qui ne sera pas facile.

Vous pouvez résoudre ceci en n'utilisant pas la ligne du tout mais en utilisant un stylo spécifique pour la TextDecoration de la barré dans le code derrière.

Answer found here

private void WindowLoaded(object sender, EventArgs e) 
    { 
     // Fill the overline decoration with a solid color brush. 
     TextDecorationCollection myCollection = new TextDecorationCollection(); 
     TextDecoration myStrikeThrough = new TextDecoration(); 
     myStrikeThrough.Location = TextDecorationLocation.Strikethrough; 

     // Set the solid color brush. 
     myStrikeThrough.Pen = new Pen(Brushes.Red, 2); 
     myStrikeThrough.PenThicknessUnit = TextDecorationUnit.FontRecommended; 

     // Set the underline decoration to the text block. 
     myCollection.Add(myStrikeThrough); 
     tb.TextDecorations = myCollection; 
    } 

puis simplifiez votre XAML. Supprimez le contrôle de ligne et ajoutez Loaded="WindowLoaded" à votre fenêtre