Domanda

Attualmente sto creando una casella di testo con un testo di filigrana e ho un piccolo problema di styling. Per creare la filigrana stessa ho incluso il codice spiegato quiTesto di filigrana / suggerimento / casella di testo di segnaposto in WPFNon ho usato la risposta accettata, ma quella con i voti più alti. (quello che usa adorner)

Il mio blocco di testo sembra questo:

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

Ora affronto il problema che con questa proprietà allegata, il blocco di testo in esso non riesce dalla portata dal mio stile che ho dichiarato in app.xaml. Lo stile sembra questo:

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

Come è possibile modellare il blocco di testo all'interno della proprietà allegata in app.xaml, preferibile con Basato su questo stile, quindi non devo dichiararlo tempi serrali.

È stato utile?

Soluzione

Declare same style for TextBlock anche in Application resources. In questo modo verrà applicato a tutti i blocchi di testo nella tua applicazione, indipendentemente dal fatto che facciano parte degli adornati o della finestra.

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

AGGIORNARE

Se non vuoi duplicare le risorse, meglio puoi ottenere è utilizzare Label invece di TextBlock. In questo modo puoi essere applicato in stile Control e può derivare stili per Window e Label da quello.

Ma questo non funzionerà per TextBlock Dal momento che non deriva da 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}"/>

Quindi, se si utilizza l'etichetta all'interno di AdornerDecorator al posto di Textblock, funzionerà bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top