2013-08-11 13 views
8

Ho TextBlock con 2 Run tag e una Linebreak:Nascondi <Run /> tag in TextBlock - WPF

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

voglio nascondere secondo Run tag nel codice dietro. Ma non c'è la proprietà Visible ... Perché è così? Qual è la soluzione migliore come nascondere solo un tag Run?

risposta

9

Visibility è la proprietà nella classe UIElement da cui derivano tutti i controlli dell'interfaccia utente ma che non deriva da Run.

migliore che potete fare è impostare Text proprietà String.Empty in codice dietro:

bottomRun.Text = String.Empty; 
+0

Peccato che questo non funzioni da uno stile – tofutim

+0

@tofutim Funziona con Stile. Ma non è possibile sovrascrivere in Style le cose che sono state impostate direttamente nell'oggetto; è necessario impostare il valore * only * nello stile e quindi sovrascriverlo in un trigger all'interno dello stile. – ANeves

+0

@ANeves - Sei sicuro? perché come detto 'Run' non ha alcuna proprietà' Visibility' associata ad esso, quindi come può essere impostato da Style? –

1

A volte questo è opportuno -, ma non è l'ideale se si ha realmente bisogno il testo a 'correre' e si desidera avere un linebreak automatico nell'elemento inline.

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

Vale la pena sottolineare che '' deve essere figlio di ''. –

4

Il TextBlock che hai è piuttosto piccolo. Di fronte a una situazione simile, l'ho duplicato e associato la proprietà Visiblity su TextBlock.

<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> 

Il convertitore è adeguatamente dichiarato, definito e accetta un parametro "invertito".

1

So che l'OP voleva risolvere questo problema utilizzando un singolo TextBlock con Runs in esso, ma ho risolto il problema con uno StackPanel di TextBlocks orientato orizzontalmente. È una soluzione più pesante poiché ci sono più controlli coinvolti, ma funziona.