如何:定義和參考資源
此範例說明如何使用 Extensible Application Markup Language (XAML) 中的屬性來定義資源並加以參考。
範例
下列範例會定義兩種類型的資源:SolidColorBrush 資源,以及數個 Style 資源。
SolidColorBrush 資源 MyBrush
可用來提供數個屬性的值,每個屬性都會採用 Brush 類型值。
Style 資源 PageBackground
、TitleText
和 Label
分別以特定控制項類型為目標。 當該樣式資源受到資源索引鍵的參考,並且用來設定 XAML 中定義的數個特定控制項元素的 Style 屬性時,樣式會在目標控制項上設定各種不同的屬性。
請注意,Label
樣式 setter 內的其中一個屬性也會參考先前定義的 MyBrush
資源。 這是常見的技術,但切記,資源會按照給定的順序進行剖析並輸入資源字典中。 如果您使用 StaticResource 標記延伸從另一個資源內參考資源,則也會依照在字典中找到的順序來要求資源。 請確定您所參考的任何資源都比先前要求資源時更早定義於資源集合中。 如有必要,您可以使用 DynamicResource 標記延伸在執行階段參考資源,以解決資源參考的嚴格建立順序,但您應注意這項 DynamicResource 技術會對效能造成影響。 如需詳細資訊,請參閱 XAML 資源。
<Page Name="root"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<SolidColorBrush x:Key="MyBrush" Color="Gold"/>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="Background" Value="Blue"/>
</Style>
<Style TargetType="TextBlock" x:Key="TitleText">
<Setter Property="Background" Value="Blue"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Foreground" Value="#4E87D4"/>
<Setter Property="FontFamily" Value="Trebuchet MS"/>
<Setter Property="Margin" Value="0,40,10,10"/>
</Style>
<Style TargetType="TextBlock" x:Key="Label">
<Setter Property="DockPanel.Dock" Value="Right"/>
<Setter Property="FontSize" Value="8"/>
<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>
</Page.Resources>
<StackPanel>
<Border Style="{StaticResource PageBackground}">
<DockPanel>
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
<TextBlock Style="{StaticResource Label}">Label</TextBlock>
<TextBlock DockPanel.Dock="Top" HorizontalAlignment="Left" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
<Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
<Ellipse DockPanel.Dock="Top" HorizontalAlignment="Left" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="40" />
</DockPanel>
</Border>
</StackPanel>
</Page>