Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit voorbeeld ziet u hoe u een resource definieert en ernaar verwijst. Er kan naar een resource worden verwezen via XAML of via code.
XAML-voorbeeld
In het volgende voorbeeld worden twee typen resources gedefinieerd: een SolidColorBrush-resource en verschillende Style resources.
<Window.Resources>
<SolidColorBrush x:Key="MyBrush" Color="#05E0E9"/>
<Style TargetType="Border">
<Setter Property="Background" Value="#4E1A3D" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="#4E1A3D"/>
<GradientStop Offset="1.0" Color="Salmon"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="TextBlock" x:Key="TitleText">
<Setter Property="FontSize" Value="18"/>
<Setter Property="Foreground" Value="#4E87D4"/>
<Setter Property="FontFamily" Value="Trebuchet MS"/>
<Setter Property="Margin" Value="0,10,10,10"/>
</Style>
<Style TargetType="TextBlock" x:Key="Label">
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Foreground" Value="{StaticResource MyBrush}"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="0,3,10,0"/>
</Style>
</Window.Resources>
Hulpmiddelen
De SolidColorBrush resource MyBrush wordt gebruikt om de waarde op te geven van verschillende eigenschappen die elk een Brush typewaarde aannemen. Naar deze resource wordt verwezen via de x:Key waarde.
<Border>
<StackPanel>
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
<TextBlock Style="{StaticResource Label}">Label</TextBlock>
<TextBlock HorizontalAlignment="Right" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
<Button HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
<Ellipse HorizontalAlignment="Center" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="10" />
</StackPanel>
</Border>
In het vorige voorbeeld wordt de MyBrush resource geopend met de staticResource Markup-extensie. De resource wordt toegewezen aan een eigenschap die het type resource kan accepteren dat wordt gedefinieerd. In dit geval de Background, Foregrounden Fill eigenschappen.
Alle resources in een resourcewoordenlijst moeten een sleutel hebben. Wanneer stijlen worden gedefinieerd, kunnen ze de sleutel weglaten, zoals wordt uitgelegd in de volgende sectie.
Resources worden ook aangevraagd door de volgorde in de woordenlijst als u de StaticResource Markup-extensie gebruikt om ernaar te verwijzen vanuit een andere resource. Zorg ervoor dat een resource waarnaar u verwijst, is gedefinieerd in de verzameling eerder dan waar die resource is aangevraagd. Zie Statische resources voor meer informatie.
Indien nodig kunt u de strikte volgorde van resourceverwijzingen omzeilen met behulp van een DynamicResource Markup-extensie om in plaats daarvan te verwijzen naar de resource tijdens runtime, maar u moet er rekening mee houden dat deze techniek gevolgen heeft voor de DynamicResource prestaties. Zie Dynamische resources voor meer informatie.
Stijlbronnen
In het volgende voorbeeld wordt impliciet en expliciet verwezen naar stijlen:
<Border>
<StackPanel>
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
<TextBlock Style="{StaticResource Label}">Label</TextBlock>
<TextBlock HorizontalAlignment="Right" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
<Button HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
<Ellipse HorizontalAlignment="Center" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="10" />
</StackPanel>
</Border>
In het vorige codevoorbeeld richten de Style resources TitleText en Label zich elk op een bepaald type besturingselement. In dit geval richten ze zich beide op een TextBlock. De stijlen stellen verschillende eigenschappen in op de doelbesturingselementen wanneer naar die stijlresource wordt verwezen door de bijbehorende resourcesleutel voor de Style eigenschap.
De stijl die op een Border besturingselement is gericht, definieert echter geen sleutel. Wanneer een sleutel wordt weggelaten, wordt het type object waarop de TargetType eigenschap wordt gericht impliciet gebruikt als de sleutel voor de stijl. Wanneer een stijl is gekoppeld aan een type, wordt deze de standaardstijl voor alle besturingselementen van dat type, zolang deze besturingselementen binnen het bereik van de stijl vallen. Zie Stijlen, DataTemplates en impliciete sleutelsvoor meer informatie.
Codevoorbeelden
De volgende codefragmenten laten zien hoe u resources maakt en instelt via code
Een stijlresource maken
Het maken van een resource en het toewijzen ervan aan een resourcelijst kan op elk gewenst moment plaatsvinden. Alleen XAML-elementen die de syntaxis van DynamicResource gebruiken, worden echter automatisch bijgewerkt met de resource nadat deze is gemaakt.
Neem bijvoorbeeld het volgende venster. Het heeft vier knoppen. De knop Forth gebruikt een DynamicResource om zichzelf te stylen. Deze resource bestaat echter nog niet, dus deze ziet er als een normale knop uit:
<StackPanel Margin="5">
<Button Click="Button_Click">Explicitly Styled</Button>
<Button>Unstyled</Button>
<Button>Unstyled</Button>
<Button Style="{DynamicResource ResourceKey=buttonStyle1}">Dynamically Styled</Button>
</StackPanel>
De volgende code wordt aangeroepen wanneer op de eerste knop wordt geklikt en de volgende taken worden uitgevoerd:
- Hiermee maakt u enkele kleuren voor eenvoudige referentie.
- Hiermee maakt u een nieuwe stijl.
- Hiermee wijst u setters toe aan de stijl.
- Hiermee voegt u de stijl toe als een resource met de naam
buttonStyle1aan de resourcewoordenlijst van het venster. - Hiermee wordt de stijl direct toegewezen aan de knop die de
Clickgebeurtenis triggert.
private void Button_Click(object sender, RoutedEventArgs e)
{
// Create colors
Color purple = (Color)ColorConverter.ConvertFromString("#4E1A3D");
Color white = Colors.White;
Color salmon = Colors.Salmon;
// Create a new style for a button
var buttonStyle = new Style(typeof(Button));
// Set the properties of the style
buttonStyle.Setters.Add(new Setter(Control.BackgroundProperty, new SolidColorBrush(purple)));
buttonStyle.Setters.Add(new Setter(Control.ForegroundProperty, new SolidColorBrush(white)));
buttonStyle.Setters.Add(new Setter(Control.BorderBrushProperty, new LinearGradientBrush(purple, salmon, 45d)));
buttonStyle.Setters.Add(new Setter(Control.BorderThicknessProperty, new Thickness(5)));
// Set this style as a resource. Any DynamicResource tied to this key will be updated.
this.Resources["buttonStyle1"] = buttonStyle;
// Set this style directly to a button
((Button)sender).Style = buttonStyle;
}
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
'Create colors
Dim purple = DirectCast(ColorConverter.ConvertFromString("#4E1A3D"), Color)
Dim white = Colors.White
Dim salmon = Colors.Salmon
'Create a new style for a button
Dim buttonStyle As New Style()
'Set the properties of the style
buttonStyle.Setters.Add(New Setter(Control.BackgroundProperty, New SolidColorBrush(purple)))
buttonStyle.Setters.Add(New Setter(Control.ForegroundProperty, New SolidColorBrush(white)))
buttonStyle.Setters.Add(New Setter(Control.BorderBrushProperty, New LinearGradientBrush(purple, salmon, 45D)))
buttonStyle.Setters.Add(New Setter(Control.BorderThicknessProperty, New Thickness(5)))
'Set this style as a resource. Any DynamicResource looking for this key will be updated.
Me.Resources("buttonStyle1") = buttonStyle
'Set this style directly to a button
DirectCast(sender, Button).Style = buttonStyle
End Sub
Nadat de code is uitgevoerd, wordt het venster bijgewerkt:
Merk op dat de stijl van de vierde knop is bijgewerkt. De stijl is automatisch toegepast omdat de knop de DynamicResource Markup-extensie gebruikte om te verwijzen naar een stijl die nog niet bestond. Nadat de stijl is gemaakt en toegevoegd aan de resources van het venster, is deze toegepast op de knop. Zie Dynamische resources voor meer informatie.
Een resource zoeken
De volgende code gaat door de logische structuur van het XAML-object waarin wordt uitgevoerd, om de opgegeven resource te vinden. De resource kan worden gedefinieerd op het object zelf, de bovenliggende, de root, tot zelfs de toepassing zelf. Met de volgende code wordt naar een resource gezocht, te beginnen met de knop zelf:
myButton.Style = myButton.TryFindResource("buttonStyle1") as Style;
myButton.Style = myButton.TryFindResource("buttonStyle1")
Expliciet verwijzen naar een resource
Wanneer u naar een resource verwijst door ernaar te zoeken of door deze te maken, kan deze rechtstreeks aan een eigenschap worden toegewezen:
// Set this style as a resource. Any DynamicResource tied to this key will be updated.
this.Resources["buttonStyle1"] = buttonStyle;
'Set this style as a resource. Any DynamicResource looking for this key will be updated.
Me.Resources("buttonStyle1") = buttonStyle
Zie ook
.NET Desktop feedback