2009-03-10 8 views
12

Mi sembra che stia vivendo un momento difficile oggi. Tutto quello che voglio fare è rendere visibile un TextBox visibile in base a un databound di valore booleano alla finestra in cui è ospitato.Come rendere una casella di testo Visibilità = Nascosto con un trigger

Quello che ho appena non verrà compilato e non capisco perché. Per favore aiuto.

<TextBlock Grid.Column="2" Text="This order will be sent to accounting for approval" 
      Foreground="Red" VerticalAlignment="Center" FontWeight="Bold" Padding="5"> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=AllowedToSubmit}" Value="True"> 
        <Setter Property="Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

risposta

19

È necessario impostare la Style.TargetType affinché possa riconoscere la proprietà Visibility:

<TextBlock Grid.Column="2" VerticalAlignment="Center" FontWeight="Bold" Foreground="Red" Padding="5" Text="This order will be sent to accounting for approval"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=AllowedToSubmit}" Value="True"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Il tuo percorso vincolante per AllowedToSubmit probabilmente ha bisogno di avere ElementName insieme al nome di 's il Window, come bene.

+0

Non necessariamente: potrebbe aver impostato un DataContext più in alto nell'albero e AllowedToSubmit è una proprietà su quell'oggetto. – Andy

+0

Concordato con Andy. Se Russ sta utilizzando MVVM, probabilmente ha un DataContext per risolvere il binding. – Adrian

+0

MVVM. Non ho bisogno di impostare ElementName. Grazie per il suggerimento però. I miei anni di vinacce si stanno dimostrando piuttosto inutili in WPF. :) – Russ

8

Un'altra opzione è quella di legarsi TextBlock.Visibility direttamente alla struttura:

<Window> 
    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="BoolToVisibility" /> 
    </Window.Resources> 
    <TextBlock Visibility="{Binding Path=AllowedToSubmit, Converter={StaticResource BoolToVisibility}}" /> 
</Window> 

Se si vuole che funzioni come nel tuo esempio, dove la vera nasconde la TextBlock, allora si può scrivere il proprio convertitore per convertire opposta del built-in BooleanToVisibilityConverter.

+0

Questo è il modo più comune per impostare la visibilità in WPF utilizzando MVVM. +1 –

Problemi correlati