Pregunta

Actualmente estoy creando un cuadro de texto con un texto de marca de agua y tengo un pequeño problema de estilo. Para crear la marca de agua en sí, he incluido el código explicado aquíWatermark / Sugerencia / cuadro de texto de marcador de posición en WPFNo usé la respuesta aceptada, sino la que tiene los votos más altos. (el que usa Adorner)

Mi mechón de texto se ve así:

<AdornerDecorator>
    <TextBox HorizontalAlignment="Right"
                VerticalAlignment="Center"
                Width="190"
                Padding="16,2,20,2">
        <utils:WatermarkService.Watermark>
            <TextBlock Text="Search" />
        </utils:WatermarkService.Watermark>
    </TextBox>
</AdornerDecorator>

Ahora me enfrento al problema de que con esta propiedad adjunta, el bloqueo text en ella sale del alcance de mi estilo que he declarado en App.xaml. El estilo se ve así:

<Style TargetType="{x:Type Window}">
    <Setter Property="FontFamily"
            Value="Tahoma" />
    <Setter Property="FontSize"
            Value="8pt"></Setter>
    <Setter Property="Background"
            Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" />
</Style>

¿Cómo es posible diseñar el bloqueo de texto dentro de la propiedad adjunta en App.xaml, preferible con Based en este estilo para que no tenga que declararlo los tiempos de servicio?

¿Fue útil?

Solución

Declare same style for TextBlock también in Application resources. De esta manera, se aplicará a todos los bloques de texto en su aplicación, sin importar si son parte de los adornadores o la ventana.

<Style TargetType="{x:Type TextBlock}">
   <Setter Property="FontFamily"
           Value="Tahoma" />
   <Setter Property="FontSize"
           Value="8pt"></Setter>
   <Setter Property="Background"
         Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/>
</Style>

ACTUALIZAR

Si no desea duplicar los recursos, lo mejor que puede obtener es usar Label en vez de TextBlock. De esa manera puedes tener un estilo aplicado en Control y puede derivar estilos para Window y Label a partir de ese.

Pero esto no funcionará para TextBlock ya que no se deriva de Control.

   <Style TargetType="Control" x:Key="BaseStyle">
        <Setter Property="FontFamily" Value="Tahoma" />
        <Setter Property="FontSize" Value="8pt"></Setter>
        <Setter Property="Background" 
        Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/>
    </Style>

    <Style TargetType="{x:Type Window}"
           BasedOn="{StaticResource BaseStyle}"/>
    <Style TargetType="{x:Type Label}"
           BasedOn="{StaticResource BaseStyle}"/>

Luego, si usa la etiqueta dentro de AdornerDecorator en lugar de TextBlock, funcionará bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top