Question

Je crée actuellement une zone de texte avec un texte de filigrane et j'ai un petit problème de style. Pour créer le filigrane lui-même, j'ai inclus le code expliqué iciWatermark / indice texte / zone de texte d'espace réservé dans WPFJe n'ai pas utilisé la réponse acceptée, mais celle avec les votes les plus élevés. (celui qui utilise des orateurs)

Mon TextBlock ressemble à ceci:

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

Maintenant, je suis confronté au problème qu'avec cette propriété jointe, le Textblock dedans sort de la portée de mon style que j'ai déclaré dans app.xaml. Le style ressemble à ceci:

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

Comment est-il possible de styliser le TextBlock dans la propriété ci-jointe dans app.xaml, préférable avec Basedon ce style, donc je n'ai pas à le déclarer des temps servaux.

Était-ce utile?

La solution

Declare same style for TextBlock aussi bien in Application resources. De cette façon, il sera appliqué à tous les blocs textaires de votre application, qu'ils fassent partie des administrateurs ou de la fenêtre.

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

METTRE À JOUR

Si vous ne souhaitez pas dupliquer les ressources, mieux vous pouvez obtenir est une utilisation Label à la place de TextBlock. De cette façon, vous pouvez avoir un style appliqué sur Control et peut dériver des styles pour Window et Label à partir de ce.

Mais cela ne fonctionnera pas pour TextBlock Puisqu'il ne dérive pas 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}"/>

Ensuite, si vous utilisez l'étiquette dans AdornerDecorator à la place de TextBlock, cela fonctionnera bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top