2013-08-11 17 views
8

Ich habe Textblock mit 2 Run-Tags und einem Linebreak:ausblenden <Run /> Tag in TextBlock- - WPF

<TextBlock> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

Ich mag hinter in Code zweiten Run Tag verstecken. Aber es gibt kein Visible Eigentum ... Warum ist es so? Was ist die beste Lösung, wie nur ein Run Tag zu verbergen?

Antwort

9

Visibility ist die Eigenschaft in der UIElement-Klasse, von der alle UI-Steuerelemente abgeleitet werden, aber Run stammt nicht davon ab.

besten Sie tun können, ist Text Eigenschaft String.Empty in Code zu setzen hinter:

bottomRun.Text = String.Empty; 
+0

Schade, das scheint nicht von einem Style zu funktionieren – tofutim

+0

@tofutim Es funktioniert von Style. Aber Sie können in Style keine Dinge überschreiben, die direkt im Objekt gesetzt wurden; Sie müssen den Wert * only * im Stil festlegen und dann in einem Trigger innerhalb des Stils überschreiben. – ANeves

+0

@ANeves - Sind Sie sicher? Weil, wie gesagt, 'Ausführen' keine Eigenschaft 'Sichtbarkeit' zugeordnet ist, wie kann es dann aus Style gesetzt werden? –

1

Manchmal ist dies sinnvoll - aber nicht ideal, wenn Sie wirklich den Text zu ‚run‘ werden soll und Sie ein haben automatischer Zeilenumbruch im Inline-Element.

<TextBlock> 
    <InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement> 
    <LineBreak/> 
    <Run x:Name="bottomRun" Text="Bottom text"/> 
</TextBlock> 
+0

Es sollte darauf hingewiesen werden, dass '' Kind von '' sein muss. –

4

Der TextBlock, den Sie haben, ist ziemlich klein. Wenn ich mit einer ähnlichen Situation konfrontiert bin, habe ich es dupliziert und die Visiblity-Eigenschaft an TextBlock gebunden.

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }"> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }"> 
     <Run Text="TopText"/> 
     <LineBreak/> 
     <Run x:Name="bottomRun" Text="Bottom text"/> 
    </TextBlock> 

Der Konverter wird in geeigneter Weise deklariert, definiert und verwendet einen Invert-Parameter.

1

Ich weiß, dass das OP dies mit einem einzigen TextBlock mit Runs lösen wollte, aber ich löste das Problem mit einem horizontal ausgerichteten StackPanel von TextBlocks. Es ist eine schwerere Lösung, da mehr Kontrollen beteiligt sind, aber funktioniert.

Verwandte Themen