0

我目前正在创建一个带有水印文本的 TextBox 并且有一点样式问题。为了创建水印本身,我 在 WPF 中包含了此处解释的代码 Watermark / hint text / placeholder TextBox 我没有使用公认的答案,而是使用得票最高的答案。(使用 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 的附加属性中设置文本块的样式,最好基于这种样式,所以我不必声明它的服务时间。

4

1 回答 1

1

Declare same style for TextBlock以及in Application resources。这样,它将应用于应用程序中的所有 TextBlock,无论它们是 Adorner 还是窗口的一部分。

<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从中派生样式。WindowLabel

但这不起作用,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 中使用 Label 代替 TextBlock,它将正常工作。

于 2013-11-07T18:45:36.320 回答