2010-03-30 5 views
8

Je suis en train de mettre en place un simple TextBox avec un texte de filigrane dans le Background. Mon code est basé sur l'exemple de Philip Patrick's blog.WPF liaison dans le style

J'essaye de l'ajuster de sorte que le texte affiché en arrière-plan soit récupéré de la propriété ToolTip sur le TextBox.

Actuellement ceci fonctionne:

<TextBox ToolTip="Type a name here..."> 
      <TextBox.Background> 
       <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
        <VisualBrush.Visual> 
         <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/> 
        </VisualBrush.Visual> 
       </VisualBrush> 
      </TextBox.Background> 
     </TextBox> 

qui affiche le texte ToolTip dans le Background du TextBox.

Mais si je déménage une partie du code vers un style de la liaison des ressources ne reçoit plus l'info ToolTip de la TextBox:

<Grid> 
    <Grid.Resources> 
     <Style x:Key="WatermarkBackground" TargetType="{x:Type TextBox}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
         <VisualBrush.Visual> 
          <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/> 
         </VisualBrush.Visual> 
        </VisualBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Grid.Resources> 

    <TextBox ToolTip="Type your name here..." Style="{StaticResource WatermarkBackground}"/> 

Les conseils ici?

+1

Pouvez-vous utiliser un modèle au lieu d'un style de sorte que vous pouvez utiliser {{Binding RelativeSource = RelativeSource TemplatedParent}, Path =} info-bulle? –

Répondre

1

Vous ne pouvez pas accéder à TextBox de la façon dont vous essayez, votre TextBlock ne figure pas dans la hiérarchie visuelle de votre TextBox. Donc, il n'est pas capable de trouver le TextBox. Vous pouvez essayer avec TextBox filigrané. Check this pour un exemple de TextBox avec filigrane.

1

Je viens d'avoir un problème identique et j'ai fini par le résoudre en me liant au PlacementTarget de l'info-bulle. La réponse est ici en détail link text

Jeremy