2016-03-28 12 views
2

In WPF arabischer Modus (FlowDirection = "RightToLeft").TextBlock Stil, um immer zu verwenden Lauf Tag

Wenn ich eine Zahl wie -24,7% geben es dies als % gedruckt wird 24.7-

folgenden Code wird die oben genannten Probleme beheben.

<Window.Resources> 

    <Style TargetType="Run"> 
     <Setter Property="FlowDirection" Value="LeftToRight" /> 
    </Style>  

</Window.Resources> 

<Grid FlowDirection="RightToLeft" > 
    <Grid HorizontalAlignment="Left" Margin="114,127,0,0" VerticalAlignment="Top" Width="279" Height="97"> 
     <TextBlock x:Name="textBlock" Text="-24.7%" ><Run></Run></TextBlock> 
    </Grid> 
</Grid> 

Jetzt möchte ich die <run><run> Tag alle meine Textblöcke Inhalt setzen, wie ich dies erreichen kann, ich muss also nicht alle meine Textblocks in dem Code ersetzen.

Wie man dies durch Erstellen eines Stils ... ??

Anmerkung: Ich kann nicht auf die Textalign = Rechts-Lösung gehen, da ich nicht alle textblockes in der Anwendung bearbeiten kann

+0

Sie wahrscheinlich ein Benutzersteuerelement erstellen möchten, die ein Textblock mit den Lauf-Tags innerhalb von ihm ist, und verwenden Sie dann Das. –

+0

@VibeeshanRC Haben Ihre TextBlocks nur negative Zahlen? Wenn nicht, und wir alle Läufe (und TextBlocks) rückgängig machen, wird das Arabisch umgekehrt? das ist ein schlechter Nebeneffekt, nein? – Taterhead

Antwort

1

Kann nicht sagen, dass ich Ihren Ansatz mag, aber ich weiß nicht, Arabische Fallstricke und deine Situation, darum werde ich nicht streiten. Mit angefügten Eigenschaften (oder Mischverhalten) können Sie erreichen, was Sie wollen. Wie folgt aus:

public static class StrangeAttachedProperty { 
    public static bool GetAddRunByDefault(DependencyObject obj) { 
     return (bool) obj.GetValue(AddRunByDefaultProperty); 
    } 

    public static void SetAddRunByDefault(DependencyObject obj, bool value) { 
     obj.SetValue(AddRunByDefaultProperty, value); 
    } 

    public static readonly DependencyProperty AddRunByDefaultProperty = 
     DependencyProperty.RegisterAttached("AddRunByDefault", typeof (bool), typeof (StrangeAttachedProperty), new PropertyMetadata(AddRunByDefaultChanged)); 

    private static void AddRunByDefaultChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { 
     var element = d as TextBlock; 
     if (element != null) { 
      // here is the main point - you can do whatever with your textblock here 
      // for example you can check some conditions and not add runs in some cases 
      element.Inlines.Add(new Run()); 
     } 
    } 
} 

Und in Ihrer Ressourcen setzen Sie diese Eigenschaft für alle Textblöcke:

<Window.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="local:StrangeAttachedProperty.AddRunByDefault" Value="True" /> 
    </Style> 
    <Style TargetType="Run"> 
     <Setter Property="FlowDirection" Value="LeftToRight" /> 
    </Style> 
</Window.Resources>