匯出 (0) 列印
全部展開
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文

FrameworkElement.Resources 屬性

取得或設定本機定義的資源字典。

命名空間:  System.Windows
組件:  PresentationFramework (在 PresentationFramework.dll 中)
針對 XAML 的 XMLNS: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[AmbientAttribute]
public ResourceDictionary Resources { get; set; }
<object>
  <object.Resources>
    oneOrMoreResourceElements
  </object.Resources>
</object>

XAML 值

oneOrMoreResourceElements

一個或多個物件項目,每個項目都會定義資源。 每個 ResourceDictionary 內的資源屬性項目必須具有 x:Key 指示詞 的唯一值,當從 ResourceDictionary 擷取值時,該值會用來當做唯一索引鍵。

屬性值

類型:System.Windows.ResourceDictionary
目前本機定義的資源字典,其中每個資源都可以使用索引鍵來存取。

可在可延伸應用程式標記語言 (XAML) 中完整或部分定義的資源字典通常是建立為屬性項目,且通常是在根項目上為任何個別頁面或應用程式而定義。 將資源字典放在這個層級,可以更容易從頁面中的個別子項目 (或是從任何頁面,若是在應用程式的情況下) 來尋找。 在大部分的應用程式案例中,建議將樣式定義為資源字典內的物件項目,或是定義為外部資源,以便整個樣式資源可以是獨立的 (Self-Contained) (此方式可透過分隔需要編輯的實體檔案,協助劃分設計人員和開發人員的責任)。

請注意,這個屬性只會傳回直接在該項目內宣告的資源字典。 這與實際的資源查閱處理序不同,在該處理序中,子項目可存取每個父項目中所定義的任何資源,並遞迴地向上搜尋。

資源也可從集合內以程式碼來參考,不過請注意,在宣告字典的項目引發 Loaded 之前,在 XAML 中所建立的資源絕對無法供存取。 事實上,資源是以非同步方式剖析,且即使是 Loaded 事件也無法保證您可以參考 XAML 定義的資源。 基於此原因,您通常只應該當做執行階段程式碼的一部分,或透過其他 XAML 技術 (例如樣式或屬性 (Attribute) 值的資源延伸參考),來存取 XAML 定義的資源。 當您透過程式碼存取資源時,基本上相當於從 XAML 進行 DynamicResource 參考。

基礎 ResourceDictionary 支援從集合內使用程式碼來新增、移除或查詢資源的必要方法。 Resources 屬性是可設定的,以支援完全取代項目之資源集合、成為新的或不同的 ResourceDictionary 之案例。

請注意,顯示的 XAML 語法並不包含 ResourceDictionary 的項目。 這是隱含集合語法範例,一個表示可省略集合項目的標記。 會改為指定當做項目加入至集合的項目。 如需隱含集合和 XAML 的詳細資訊,請參閱 XAML 語法詳細資料 一個 ResourceDictionary 仍明確指定為項目的案例就是發生在採用合併的字典時,在此案例中,通常沒有該 ResourceDictionary 的子項目。 如需詳細資訊,請參閱 合併的資源字典

這個範例顯示如何定義資源,以及如何使用可延伸應用程式標記語言 (XAML) 中的屬性 (Attribute) 參考它。

下列範例定義兩種資源:一個 SolidColorBrush 資源和數個 Style 資源。 SolidColorBrush 資源 MyBrush 用於提供數個屬性 (Property) 的值,這些屬性皆以 Brush 型別為值。 Style 資源 PageBackgroundTitleTextLabel 各以特定的控制項型別為目標。 當使用資源索引鍵參考樣式資源,並用樣式資源設定在 XAML 中定義的數個特定控制項項目的 Style 屬性 (Property) 時,該樣式會在目標控制項上設定各種不同的屬性 (Property)。

請注意,Label 樣式的 setter 中的其中一個屬性 (Property) 也會參考稍早定義的 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>


.NET Framework

支援版本:4.5、4、3.5、3.0

.NET Framework Client Profile

支援版本:4、3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

此.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求.

社群新增項目

新增
顯示:
© 2014 Microsoft