2010-03-30 10 views
8

Estoy tratando de configurar un simple TextBox con texto de marca de agua en el Background. Mi código se basa en el ejemplo de Philip Patrick's blog.Encuadernación WPF en estilo

Estoy tratando de ajustarlo para que el texto que se muestra en el fondo se recupere de la propiedad ToolTip en el TextBox.

Actualmente esto funciona:

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

que muestra el texto en el ToolTipBackground del TextBox.

Pero si muevo parte del código a un estilo de Recursos de la unión ya no tiene la información de la ToolTipTextBox:

<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}"/> 

Algún consejo aquí?

+1

Podría utilizar una plantilla en lugar de un estilo de esta manera puede utilizar {Binding RelativeSource = {} RelativeSource TemplatedParent, Path =} sobre herramientas? –

Respuesta

1

No puede acceder a TextBox de la manera que está intentando, su TextBlock no está en la jerarquía visual de su TextBox. Por lo tanto, no puede encontrar el TextBox. Puedes probar con Watermarked TextBox. Check this para una Muestra de Watermarked TextBox.

1

Acabo de tener un problema idéntico y terminé resolviéndolo mediante el enlace al PlacementTarget de la información sobre herramientas. La respuesta está en los detalles aquí link text

Jeremy

Cuestiones relacionadas