Sök…


Anmärkningar

Inledande anmärkningar

I WPF definierar en stil värdena för en eller flera beroendeegenskaper för ett visst visuellt element. Stilar används i hela applikationen för att göra användargränssnittet mer konsekvent (t.ex. att ge alla dialogknappar en jämn storlek) och för att göra bulkändringar enklare (t.ex. att ändra bredden på alla knappar.)

Stilar definieras vanligtvis i en ResourceDictionary på en hög nivå i applikationen (t.ex. i App.xaml eller i ett tema) så det är tillgängligt i hela appen, men de kan också definieras för ett enda element och dess barn, t.ex. stil till alla TextBlock element i en 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>

Viktiga anteckningar

  • Platsen där stilen definieras påverkar var den är tillgänglig.
  • Framåtreferenser kan inte lösas av StaticResource . Med andra ord, om du definierar en stil som beror på en annan stil eller resurs i en resursordbok, måste den definieras efter / under den resurs som den beror på.
  • StaticResource är det rekommenderade sättet att hänvisa till stilar och andra resurser (av prestanda och beteendemässiga skäl) om du inte specifikt kräver användning av DynamicResource , t.ex. för teman som kan ändras vid körning.

Resurser

MSDN har grundliga artiklar om stilar och resurser som har mer djup än vad som är möjligt att tillhandahålla här.

Definiera en namngivna stil

En namngiven stil kräver att x:Key egenskapen ska ställas in och gäller endast för element som uttryckligen hänvisar till det med namn:

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

Definiera en implicit stil

En implicit stil gäller för alla element av en viss typ inom räckvidden. En implicit stil kan utelämnas x:Key eftersom den implicit är densamma som stilens egenskap TargetType .

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

Ärver från en stil

Det är vanligt att behöva en basstil som definierar egenskaper / värden som delas mellan flera stilar som tillhör samma kontroll, särskilt för något som TextBlock . Detta uppnås genom att använda egenskapen BasedOn . Värden ärvs och kan sedan åsidosättas.

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

I exemplet ovan skulle alla TextBlock använder stilen WarningTextBlockStyle presenteras som 12px Arial med rött och fet stil.

Eftersom implicita stilar har en implicit x:Key som matchar deras TargetType , kan du också ärva dem:

<!-- 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow