C# 水印大小/系列

C# 水印大小/系列,c#,wpf,xaml,attached-properties,adorner,C#,Wpf,Xaml,Attached Properties,Adorner,我目前正在创建一个带有水印文本的文本框,但有一点样式问题。 为了创建水印本身,我已经包含了这里解释的代码 我没有使用公认的答案,而是使用得票最多的答案。(使用装饰器的那个) 我的文本块如下所示: <AdornerDecorator> <TextBox HorizontalAlignment="Right" VerticalAlignment="Center" Width="190"

我目前正在创建一个带有水印文本的文本框,但有一点样式问题。 为了创建水印本身,我已经包含了这里解释的代码 我没有使用公认的答案,而是使用得票最多的答案。(使用装饰器的那个)

我的文本块如下所示:

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

现在我面临的问题是,使用这个附加属性,其中的textblock超出了我在app.xaml中声明的样式的范围。 样式如下所示:

<AdornerDecorator>
    <TextBox HorizontalAlignment="Right"
                VerticalAlignment="Center"
                Width="190"
                Padding="16,2,20,2">
        <utils:WatermarkService.Watermark>
            <TextBlock Text="Search" />
        </utils:WatermarkService.Watermark>
    </TextBox>
</AdornerDecorator>
<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中的附加属性中设置textblock的样式,最好使用BaseOn这种样式,这样我就不必多次声明它。

在应用程序资源中为textblock以及
声明相同的样式。这样,它将应用于应用程序中的所有文本块,无论它们是装饰程序还是窗口的一部分

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

然后,如果您使用AdornerDecorator内部的标签代替TextBlock,它将工作正常。

谢谢您的回答。是否有一种更简单的方法可以指定所有文本默认使用的fontsize/fontfamily。我有点希望它与我的风格,但这似乎不是事实。我不喜欢两次指定相同样式的想法,我不能在我的案例中至少使用basedon样式吗?对于basedon来说,两种样式的targetType应该是相同的。但在一种情况下,您有一个窗口,另一个是TextBlock。因此,没有重复的样式是不可能的?更新了另一种方法,您可以使用标签代替TextBlock,而不必重复样式。