Pergunta

Atualmente, estou criando uma caixa de texto com uma marca d'água e tenho um pouco de problema de estilo. Para criar a marca d'água, incluí o código explicado aquiCaixa de texto de texto / dica de texto / dica de dica / espaço reservado no WPFNão usei a resposta aceita, mas a que tem votos mais altos. (aquele usando adorner)

Meu bloco de texto se parece com o seguinte:

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

Agora, enfrento o problema de que, com essa propriedade anexada, o TextBlock nele sai do escopo do meu estilo que declarei no app.xaml. O estilo é assim:

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

Como é possível estilizar o bloco de texto dentro da propriedade anexada no app.xaml, preferível com basear esse estilo, para que eu não precise declarar os horários serval.

Foi útil?

Solução

Declare same style for TextBlock também in Application resources. Dessa forma, ele será aplicado a todos os blocos de texto em seu aplicativo, independentemente de eles fazem parte de adornos ou janela.

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

ATUALIZAR

Se você não deseja duplicar recursos, o melhor que você pode obter é usar Label ao invés de TextBlock. Dessa forma, você pode ter o estilo aplicado Control e pode derivar estilos para Window e Label a partir desse.

Mas isso não funcionará para TextBlock já que não 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}"/>

Então, se você usar a etiqueta dentro do AdornerDecorator no lugar do TextBlock, ele funcionará bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top