2009-03-10 12 views
12

Je semble avoir du mal aujourd'hui. Tout ce que je veux faire est de TextBox caché de visible basé sur une base de données de valeur booléenne à la fenêtre dans laquelle il est hébergé.Comment faire une boîte de texte Visibilité = Caché avec un déclencheur

Ce que je viens de ne compilera pas et je ne comprends pas pourquoi. S'il vous plaît aider.

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

Répondre

19

Vous devez définir le Style.TargetType afin qu'il reconnaisse la propriété 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> 

Votre chemin se liant à AllowedToSubmit a probablement besoin d'avoir ElementName ensemble au nom du Window, comme bien.

+0

Pas nécessairement - il aurait pu définir un DataContext plus haut dans l'arborescence, et AllowedToSubmit est une propriété de cet objet. – Andy

+0

D'accord avec Andy. Si Russ utilise MVVM, il a probablement un DataContext pour résoudre la liaison. – Adrian

+0

MVVM. Je n'ai pas besoin de définir le ElementName. Merci pour le conseil si. Mes années de winforms s'avèrent être sans valeur dans WPF. :) – Russ

8

Une autre option consiste à lier TextBlock.Visibility directement à la propriété:

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

Si vous voulez que cela fonctionne comme dans votre exemple, où vrai cache le TextBlock, alors vous pouvez écrire votre propre convertisseur pour convertir en face de l'BooleanToVisibilityConverter intégré.

+0

C'est la manière la plus courante de définir la visibilité dans WPF à l'aide de MVVM. +1 –