Zoeken…


Opmerkingen

Inleidende opmerkingen

In WPF definieert een stijl de waarden van een of meer afhankelijkheidseigenschappen voor een bepaald visueel element. Stijlen worden overal in de applicatie gebruikt om de gebruikersinterface consistenter te maken (bijvoorbeeld om alle dialoogknoppen een consistente grootte te geven) en om bulkwijzigingen gemakkelijker te maken (bijvoorbeeld de breedte van alle knoppen te wijzigen.)

Stijlen worden meestal gedefinieerd in een ResourceDictionary op een hoog niveau in de applicatie (bijvoorbeeld in App.xaml of in een thema), dus het is app-breed beschikbaar, maar ze kunnen ook worden gedefinieerd voor een enkel element en de onderliggende elementen, bijvoorbeeld het toepassen van een stijl voor alle TextBlock elementen in een StackPanel .

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="5,5,5,0"/>
            <Setter Property="Background" Value="#FFF0F0F0"/>
            <Setter Property="Padding" Value="5"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="First Child"/>
    <TextBlock Text="Second Child"/>
    <TextBlock Text="Third Child"/>      
</StackPanel>

Belangrijke aantekeningen

  • De locatie waar de stijl is gedefinieerd, is van invloed op waar deze beschikbaar is.
  • Voorwaartse verwijzingen kunnen niet worden opgelost door StaticResource . Met andere woorden, als u een stijl definieert die afhankelijk is van een andere stijl of bron in een bronnenwoordenboek, moet deze worden gedefinieerd achter / onder de bron waarvan deze afhankelijk is.
  • StaticResource is de aanbevolen manier om naar stijlen en andere bronnen te verwijzen (om prestatie- en gedragsredenen), tenzij u specifiek het gebruik van DynamicResource , bijvoorbeeld voor thema's die tijdens runtime kunnen worden gewijzigd.

Middelen

MSDN heeft grondige artikelen over stijlen en bronnen die meer diepgang hebben dan hier mogelijk is.

Een benoemde stijl definiëren

Voor een benoemde stijl moet de eigenschap x:Key worden ingesteld en is deze alleen van toepassing op elementen die hier expliciet naar verwijzen:

<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="Yellow and bold!" Style="{StaticResource MyTextBlockStyle}" />
    <TextBlock Text="Also yellow and bold!" Style="{DynamicResource MyTextBlockStyle}" />
    <TextBlock Text="Plain text." />      
</StackPanel>

Een impliciete stijl definiëren

Een impliciete stijl is van toepassing op alle elementen van een bepaald type binnen het bereik. Een impliciete stijl kan x:Key weglaten, omdat deze impliciet hetzelfde is als de eigenschap TargetType de stijl.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>

    <TextBlock Text="Yellow and bold!"  />
    <TextBlock Text="Also yellow and bold!" />
    <TextBlock Style="{x:Null}" Text="I'm not yellow or bold; I'm the control's default style!" />
</StackPanel>

Overerving van een stijl

Het is gebruikelijk om een basisstijl te hebben die eigenschappen / waarden definieert die worden gedeeld tussen meerdere stijlen die tot hetzelfde besturingselement behoren, vooral voor iets als TextBlock . Dit wordt bereikt door de eigenschap BasedOn . Waarden worden overgenomen en kunnen vervolgens worden genegeerd.

<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource BaseTextBlockStyle">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>

In het bovenstaande voorbeeld wordt elke TextBlock met de stijl WarningTextBlockStyle gepresenteerd als 12 px Arial in rood en vetgedrukt.

Omdat impliciete stijlen een impliciete x:Key die overeenkomt met hun TargetType , kunt u deze ook erven:

<!-- Implicit -->
<Style TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow