2009-03-10 16 views
12

Parece que estoy teniendo un momento difícil hoy. Todo lo que quiero hacer es hacer un TextBox oculto de visible basado en un valor de bool de datos enlazada a la ventana en la que está alojado.Cómo hacer un cuadro de texto Visibilidad = Oculto con un desencadenador

Lo que no acabo de compilar y no entiendo por qué. Por favor ayuda.

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

Respuesta

19

Es necesario configurar el Style.TargetType a fin de que reconozca la Visibility propiedad:

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

Su ruta de enlace a AllowedToSubmit probablemente necesita tener ElementName conjunto a nombre de la Window 's, como se bien.

+0

No necesariamente - podría haber establecido un DataContext más arriba en el árbol, y AllowedToSubmit es una propiedad de ese objeto. – Andy

+0

De acuerdo con Andy. Si Russ está usando MVVM, probablemente tenga un DataContext para resolver el enlace. – Adrian

+0

MVVM. No necesito configurar el ElementName. Gracias por el consejo. Mis años de winforms están demostrando ser bastante inútiles en WPF. :) – Russ

8

Otra opción es unir TextBlock.Visibility directamente a la propiedad:

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

Si quieres que funcione igual que en la muestra, donde la verdadera oculta la TextBlock, entonces usted puede escribir su propio convertidor para convertir opuesta del built-in BooleanToVisibilityConverter.

+0

Esta es la forma más común de establecer la visibilidad en WPF usando MVVM. +1 –

Cuestiones relacionadas