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