Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a példa bemutatja, hogyan definiálhat és hivatkozhat rá egy erőforrást. Az erőforrások az XAML-ben vagy kódon keresztül is hivatkozhatók.
XAML-példa
Az alábbi példa kétféle erőforrástípust határoz meg: egy SolidColorBrush erőforrást és több Style erőforrást.
<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>
Erőforrások
A SolidColorBrush erőforrás MyBrush
több tulajdonság értékét adja meg, amelyek mindegyike Brush típusú értéket vesz fel. Az erőforrásra a x:Key
érték hivatkozik.
<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>
Az előző példában a MyBrush
erőforrás a StaticResource markup kiterjesztéshasználatával érhető el. Az erőforrás egy olyan tulajdonsághoz van hozzárendelve, amely képes elfogadni a definiált erőforrás típusát. Ebben az esetben a Background, Foregroundés Fill tulajdonságokat.
Az erőforrás-szótárban lévő összes erőforrásnak kell hogy legyen egy kulcsa. Amikor azonban stílusok vannak definiálva, kihagyhatják a kulcsot, amint azt a következő szakaszbanelmagyarázzák.
Az erőforrások a szótárban található sorrend szerint kérhetők, ha a StaticResource Markup bővítményt használva hivatkozik azokra egy másik erőforrásból. Győződjön meg arról, hogy a hivatkozott erőforrások a gyűjteményben korábban vannak definiálva, mint ahol az erőforrást kérik. További információ: Statikus erőforrások.
Szükség esetén megkerülheti az erőforrás-hivatkozások szigorú létrehozási sorrendjét egy DynamicResource Markup bővítmény használatával, hogy futásidőben hivatkozzon az erőforrásra, de tisztában kell lennie azzal, hogy ennek a DynamicResource
technikának teljesítménykövetkezményei vannak. További információ: Dinamikus erőforrások.
Stíluserőforrások
Az alábbi példa implicit módon és explicit módon hivatkozik a stílusokra:
<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>
Az előző kód példában a Style erőforrások TitleText
és Label
, amelyek mindegyike egy adott vezérlőtípust céloz meg. Ebben az esetben mindkettő egy TextBlockcéloz meg. A stílusok különböző tulajdonságokat határoznak meg a célzott vezérlőkön, ha a stíluserőforrásra a Style tulajdonság erőforráskulcsa hivatkozik.
A Border vezérlőelemet megcélzó stílus azonban nem határoz meg kulcsot. Ha kihagy egy kulcsot, a TargetType tulajdonság által megcélzott objektumtípus implicit módon lesz használva a stílus kulcsaként. Ha egy stílus egy típushoz van kapcsolva, az lesz az alapértelmezett stílus az adott típusú vezérlők esetében, amennyiben ezek a vezérlők a stílus hatókörén belül vannak. További információért lásd: Stílusok, DataTemplates és implicit kulcsok.
Példakódok
Az alábbi kódrészletek bemutatják az erőforrások kódon keresztüli létrehozását és beállítását
Stíluserőforrás létrehozása
Az erőforrás létrehozása és erőforrás-szótárhoz való hozzárendelése bármikor megtörténhet. Azonban csak a DynamicResource szintaxist használó XAML-elemek lesznek automatikusan frissítve az erőforrással a létrehozásuk után.
Vegyük például a következő ablakot. Négy gombja van. A negyedik gomb egy DynamicResource használatával van formázva. Ez az erőforrás azonban még nem létezik, ezért úgy néz ki, mint egy normál gomb:
<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>
Az első gombra kattintáskor a rendszer a következő kódot hívja meg, és végrehajtja a következő feladatokat:
- Néhány színt hoz létre a könnyű referencia érdekében.
- Új stílust hoz létre.
- Setterek hozzárendelése a stílushoz.
- Hozzáadja a stílust
buttonStyle1
nevű erőforrásként az ablak erőforrás-szótárához. - A stílust közvetlenül a
Click
eseményt növelő gombhoz rendeli.
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
A kód futtatása után az ablak frissül:
Figyelje meg, hogy a következő gomb stílusa frissült. A stílus automatikusan alkalmazva lett, mert a gomb a DynamicResource markup bővítményt használta egy még nem létező stílusra való hivatkozáshoz. Miután létrehozta a stílust, és hozzáadta az ablak erőforrásaihoz, a gombra alkalmazták. További információ: Dinamikus erőforrások.
Erőforrás keresése
Az alábbi kód bejárja annak az XAML-objektumnak a logikai fáját, amelyben fut, és megkeresi a megadott erőforrást. Lehetséges, hogy az erőforrás az objektumon magán, annak szülőjén, egészen a gyökérig, azaz maga az alkalmazásig van meghatározva. Az alábbi kód egy erőforrást keres, a gombtól kezdve:
myButton.Style = myButton.TryFindResource("buttonStyle1") as Style;
myButton.Style = myButton.TryFindResource("buttonStyle1")
Explicit módon hivatkozzon egy erőforrásra
Ha egy erőforrásra hivatkozik, akár kereséssel, akár létrehozással, közvetlenül hozzárendelhető egy tulajdonsághoz:
// 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
Lásd még
.NET Desktop feedback