2010-03-30 18 views
8

Sto provando a impostare un semplice TextBox con un testo filigrana nello Background. Il mio codice si basa sull'esempio da Philip Patrick's blog.Rilegatura WPF in stile

Sto provando a modificarlo in modo che il testo visualizzato sullo sfondo venga recuperato dalla proprietà ToolTip sullo TextBox.

Attualmente questo funziona:

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

che visualizza il testo ToolTip nel Background del TextBox.

Ma se mi muovo parte del codice fuori ad uno stile di risorse ottiene il legame non è più il ToolTip informazioni dal 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}"/> 

Eventuali suggerimenti qui?

+1

Potrebbe utilizzare un modello al posto di uno stile in modo da poter utilizzare {Binding RelativeSource = {} RelativeSource TemplatedParent, Path = ToolTip}? –

risposta

1

Non è possibile accedere a TextBox come si sta provando, il TextBlock non si trova nella gerarchia visiva del TextBox. Quindi non è in grado di trovare il TextBox. Puoi provare con TextBox con filigrana. Check this per un esempio di TextBox con filigrana.

1

Ho appena avuto un problema identico e ho finito per risolverlo legandosi al PlacementTarget del ToolTip. La risposta è nei dettagli qui link text

Jeremy