HOW TO:定義和參考資源
這個範例顯示如何定義資源,以及如何使用Extensible Application Markup Language (XAML) 中的屬性 (Attribute) 參考它。
範例
下列範例定義兩種資源:一個 SolidColorBrush 資源和數個 Style 資源。 SolidColorBrush 資源 MyBrush 用於提供數個屬性 (Property) 的值,這些屬性皆以 Brush 型別為值。 Style 資源 PageBackground、TitleText 和 Label 各以特定的控制項型別為目標。 當使用資源索引鍵參考樣式資源,並用樣式資源設定在 XAML 中定義的數個特定控制項項目的 Style 屬性 (Property) 時,該樣式會在目標控制項上設定各種不同的屬性 (Property)。
請注意,Label 樣式的 setter 中的其中一個屬性 (Property) 也會參考稍早定義的 MyBrush 資源。 這是一個常用的技巧,但是要記住,剖析資源以及將資源輸入至資源字典中的順序和它們原來列出的順序一樣。 如果您使用 StaticResource 標記延伸在另一個資源中參考資源,要求資源的順序也會和在字典中找到它們的順序一樣。 請確定您要參考的資源都在要求資源之前就在資源集合中定義完畢。 若要免除嚴格的資源參考建立順序問題,可以改成在執行時期才用 DynamicResource 標記延伸參考資源,但是您要知道,這個 DynamicResource 技巧得犧牲效能。 如需詳細資訊,請參閱資源概觀。
<Page Name="root"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://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>