Вопрос

В настоящее время я создаю текстовый поле с текстом водяного знака и имею небольшую проблему стиля. Чтобы создать сам водяной знак, я включил код, объясненный здесьВодяной знак / подсказка текстового положения / заполнителя в WPFЯ не использовал принятый ответ, но тот, у кого есть самые высокие голоса. (тот, который использует Adorner)

Мой текстовый блок выглядит так:

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

Теперь я сталкиваюсь с проблемой, что с помощью этого прикрепленного свойства текстовый блок в нем выходит из моего стиля, который я объявил в App.xaml. Стиль выглядит так:

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

Как можно удивить текстовый блок в прикрепленном свойстве в app.xaml, предпочтительнее этого стиля на основе этого стиля, поэтому мне не нужно объявлять его временем обслуживания.

Это было полезно?

Решение

Declare same style for TextBlock также in Application resources. Анкет Таким образом, он будет применен ко всем текстовым блокам в вашем приложении независимо от того, являются ли они частью украшений или окна.

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

ОБНОВИТЬ

Если вы не хотите дублировать ресурсы, лучше всего использовать Label вместо TextBlock. Анкет Таким образом, вы можете применять стиль Control и может получить стили для Window а также Label От этого.

Но это не сработает для TextBlock так как это не происходит из 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}"/>

Затем, если вы используете метку внутри Adornerdecorator вместо TextBlock, он будет работать нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top