WPF İçinde URI'leri Paketleme

Windows Presentation Foundation'da (WPF), tekdüzen kaynak tanımlayıcıları (URI'ler), dosyaları tanımlamak ve yüklemek için aşağıdakiler de dahil olmak üzere birçok şekilde kullanılır:

  • Bir uygulamanın ilk kez ne zaman başlatılacağını göstermek için kullanıcı arabirimini (UI) belirtme.

  • Görüntüler yükleniyor.

  • Sayfalara gezinme.

  • Yürütülemeyen veri dosyaları yükleniyor.

Ayrıca, URI'ler aşağıdakiler de dahil olmak üzere çeşitli konumlardaki dosyaları tanımlamak ve yüklemek için kullanılabilir:

  • Geçerli derleme.

  • Başvuruda bulunılan derleme.

  • Bir derlemeye göre konum.

  • Uygulamanın kaynak sitesi.

WPF, bu tür dosyaları bu konumlardan tanımlamak ve yüklemek için tutarlı bir mekanizma sağlamak için paket URI şemasının genişletilebilirliğini kullanır. Bu konu düzenine genel bir bakış sağlar, çeşitli senaryolar için paket URI'leri oluşturmayı kapsar, hem işaretleme hem de koddan paket URI'lerinin nasıl kullanılacağını göstermeden önce mutlak ve göreli URI'leri ve URI çözümlemesini açıklar.

Paket URI Düzeni

Paket URI şeması, içeriği düzenlemeye ve tanımlamaya yönelik bir modeli açıklayan Open Packaging Conventions (OPC) belirtimi tarafından kullanılır. Bu modelin temel öğeleri paketler ve parçalardır ve burada bir paket bir veya daha fazla mantıksal parça için mantıksal kapsayıcıdır. Aşağıdaki şekil bu kavramı gösterir.

Package and Parts diagram

Parçaları tanımlamak için OPC belirtimi, paket URI düzenini tanımlamak için RFC 2396'nın genişletilebilirliğini (Tekdüzen Kaynak Tanımlayıcıları (URI): Genel Söz Dizimi) kullanıyor.

Bir URI tarafından belirtilen düzen, ön ekine göre tanımlanır; http, ftp ve file iyi bilinen örneklerdir. Paket URI düzeni, şeması olarak "pack" kullanır ve iki bileşen içerir: yetkili ve yol. Paket URI'sinin biçimi aşağıdadır.

pack:// authority/yolu

Yetkili, bir parçanın içerdiği paket türünü belirtirken, yol bir parçanın paket içindeki konumunu belirtir.

Bu kavram aşağıdaki şekilde gösterilmiştir:

Relationship among package, authority, and path

Paketler ve parçalar uygulamalar ve dosyalara benzer; burada bir uygulama (paket) aşağıdakiler dahil olmak üzere bir veya daha fazla dosya (parça) içerebilir:

  • Yerel derlemede derlenen kaynak dosyaları.

  • Başvuruda bulunılan bir derlemede derlenen kaynak dosyaları.

  • Başvuru derlemesinde derlenen kaynak dosyaları.

  • İçerik dosyaları.

  • Kaynak dosyaların sitesi.

WPF, bu tür dosyalara erişmek için iki yetkiliyi destekler: application:/// ve siteoforigin:///. application:/// yetkilisi, kaynak ve içerik dosyaları da dahil olmak üzere derleme zamanında bilinen uygulama veri dosyalarını tanımlar. siteoforigin:/// yetkilisi kaynak dosyaların sitesini tanımlar. Her yetkilinin kapsamı aşağıdaki şekilde gösterilmiştir.

Pack URI diagram

Dekont

Paket URI'sinin yetkili bileşeni, pakete işaret eden ve RFC 2396'ya uyması gereken ekli bir URI'dir. Buna ek olarak, "/" karakterinin "," karakteriyle değiştirilmesi ve "%" ve "?" gibi ayrılmış karakterlerin kaçış karakteri olması gerekir. Ayrıntılar için OPC'ye bakın.

Aşağıdaki bölümlerde kaynak, içerik ve kaynak dosyalarının sitesini tanımlamak için uygun yollarla birlikte bu iki yetkiliyi kullanarak paket URI'lerinin nasıl yapılacağı açıklanmaktadır.

Kaynak Dosya Paketi URI'leri

Kaynak dosyaları MSBuild Resource öğeleri olarak yapılandırılır ve derlemeler halinde derlenir. WPF, yerel derlemede derlenen veya yerel derlemeden başvuruda bulunan bir derlemede derlenen kaynak dosyalarını tanımlamak için kullanılabilecek paket URI'lerinin oluşturulmasını destekler.

Yerel Derleme Kaynak Dosyası

Yerel derlemede derlenen bir kaynak dosyasının paket URI'si aşağıdaki yetkiliyi ve yolu kullanır:

  • Yetkili: application:///.

  • Yol: Yerel derleme proje klasörü köküne göre, yolu da dahil olmak üzere kaynak dosyasının adı.

Aşağıdaki örnek, yerel derlemenin proje klasörünün kökünde bulunan bir XAML kaynak dosyasının paket URI'sini gösterir.

pack://application:,,,/ResourceFile.xaml

Aşağıdaki örnek, yerel derlemenin proje klasörünün alt klasöründe bulunan bir XAML kaynak dosyasının paket URI'sini gösterir.

pack://application:,,,/Subfolder/ResourceFile.xaml

Başvuruda Bulunılan Derleme Kaynak Dosyası

Başvuruda bulunılan bir derlemede derlenen bir kaynak dosyasının paket URI'si aşağıdaki yetkiliyi ve yolu kullanır:

  • Yetkili: application:///.

  • Yol: Başvuruda bulunılan bir derlemede derlenen kaynak dosyasının adı. Yol aşağıdaki biçime uygun olmalıdır:

    AssemblyShortName{; Sürüm]{; PublicKey]; bileşen/Yol

    • AssemblyShortName: Başvuruda bulunılan derlemenin kısa adı.

    • ; Sürüm [isteğe bağlı]: kaynak dosyasını içeren başvuruda bulunılan derlemenin sürümü. Bu, aynı kısa ada sahip iki veya daha fazla başvurulmuş derleme yüklendiğinde kullanılır.

    • ;P ublicKey [isteğe bağlı]: başvurulan derlemeyi imzalamak için kullanılan ortak anahtar. Bu, aynı kısa ada sahip iki veya daha fazla başvurulmuş derleme yüklendiğinde kullanılır.

    • ; component: başvurulmakta olan derlemeye yerel derlemeden başvurulduğunu belirtir.

    • /Path: Başvuruda bulunılan derlemenin proje klasörünün köküne göre, yolu da dahil olmak üzere kaynak dosyasının adı.

Aşağıdaki örnek, başvuruda bulunılan derlemenin proje klasörünün kökünde bulunan bir XAML kaynak dosyasının paket URI'sini gösterir.

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

Aşağıdaki örnek, başvuruda bulunılan derlemenin proje klasörünün alt klasöründe bulunan bir XAML kaynak dosyasının paket URI'sini gösterir.

pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

Aşağıdaki örnekte, sürüme özgü bir derlemenin proje klasörünün kök klasöründe bulunan bir XAML kaynak dosyasının paket URI'si gösterilmektedir.

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

Başvuruda bulunılan derleme kaynak dosyaları için paket URI söz diziminin yalnızca application:/// yetkilisiyle kullanılabileceğini unutmayın. Örneğin, WPF'de aşağıdakiler desteklenmez.

pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml

İçerik Dosya Paketi URI'leri

İçerik dosyasının paket URI'sinde aşağıdaki yetkili ve yol kullanılır:

  • Yetkili: application:///.

  • Yol: uygulamanın ana yürütülebilir derlemesinin dosya sistemi konumuna göre yolu da dahil olmak üzere içerik dosyasının adı.

Aşağıdaki örnek, yürütülebilir derlemeyle aynı klasörde bulunan bir XAML içerik dosyasının paket URI'sini gösterir.

pack://application:,,,/ContentFile.xaml

Aşağıdaki örnek, uygulamanın yürütülebilir derlemesine göre bir alt klasörde bulunan bir XAML içerik dosyasının paket URI'sini gösterir.

pack://application:,,,/Subfolder/ContentFile.xaml

Dekont

HTML içerik dosyalarına gidilemiyor. URI düzeni yalnızca kaynak sitede bulunan HTML dosyalarına gezintiyi destekler.

Kaynak Paketi URI'lerinin sitesi

Kaynak dosya sitesi için paket URI'sinde aşağıdaki yetkili ve yol kullanılır:

  • Yetkili: siteoforigin:///.

  • Yol: Yürütülebilir derlemenin başlatıldığı konuma göre yolu da dahil olmak üzere kaynak dosya sitesinin adı.

Aşağıdaki örnek, yürütülebilir derlemenin başlatıldığı konumda depolanan bir kaynak dosyanın XAML sitesi için paket URI'sini gösterir.

pack://siteoforigin:,,,/SiteOfOriginFile.xaml

Aşağıdaki örnek, uygulamanın yürütülebilir derlemesinin başlatıldığı konuma göre alt klasörde depolanan bir kaynak dosyanın XAML sitesi için paket URI'sini gösterir.

pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml

Sayfa Dosyaları

MSBuild Page öğeleri olarak yapılandırılan XAML dosyaları, kaynak dosyalarıyla aynı şekilde derlemeler halinde derlenir. Sonuç olarak, MSBuild Page öğeleri kaynak dosyaları için paket URI'leri kullanılarak tanımlanabilir.

GENELLIKLE MSBuildPage öğeleri olarak yapılandırılan XAML dosyalarının türleri, kök öğesi olarak aşağıdakilerden birine sahiptir:

Mutlak ve Göreli Paket URI'leri karşılaştırması

Tam paket URI'sinde şema, yetkili ve yol bulunur ve mutlak paket URI'si olarak kabul edilir. Geliştiriciler için basitleştirme olarak, XAML öğeleri genellikle yalnızca yolu içeren göreli bir paket URI'si ile uygun öznitelikler ayarlamanıza olanak sağlar.

Örneğin, yerel derlemedeki bir kaynak dosyası için aşağıdaki mutlak paket URI'sini göz önünde bulundurun.

pack://application:,,,/ResourceFile.xaml

Bu kaynak dosyasına başvuran göreli paket URI'si aşağıdaki gibi olacaktır.

/ResourceFile.xaml

Dekont

Kaynak dosyaların sitesi derlemelerle ilişkilendirilmediğinden, bunlara yalnızca mutlak paket URI'leri ile başvurulabilir.

Varsayılan olarak, göreli paket URI'si, başvuruyu içeren işaretlemenin veya kodun konumuna göre kabul edilir. Öte yandan, öndeki bir ters eğik çizgi kullanılırsa, göreli paket URI başvurusu uygulamanın köküne göre kabul edilir. Örneğin, aşağıdaki proje yapısını göz önünde bulundurun.

App.xaml

Page2.xaml

\SubFolder

+ Page1.xaml

+ Page2.xaml

Page1.xaml, Root\SubFolder\Page2.xaml'e başvuran bir URI içeriyorsa, başvuru aşağıdaki göreli paket URI'sini kullanabilir.

Page2.xaml

Page1.xaml, Root\Page2.xaml'e başvuran bir URI içeriyorsa, başvuru aşağıdaki göreli paket URI'sini kullanabilir.

/Page2.xaml

Paket URI Çözümlemesi

Paket URI'lerinin biçimi, farklı dosya türleri için paket URI'lerinin aynı görünmesini mümkün kılar. Örneğin, aşağıdaki mutlak paket URI'sini göz önünde bulundurun.

pack://application:,,,/ResourceOrContentFile.xaml

Bu mutlak paket URI'si, yerel derlemedeki bir kaynak dosyasına veya içerik dosyasına başvurabilir. Aşağıdaki göreli URI için de aynı durum geçerlidir.

/ResourceOrContentFile.xaml

Bir paket URI'sinin başvurduğu dosya türünü belirlemek için WPF, yerel derlemelerdeki kaynak dosyaları ve içerik dosyalarındaki URI'leri aşağıdaki buluşsal yöntemleri kullanarak çözümler:

  1. Paket URI'sine uyan bir AssemblyAssociatedContentFileAttribute öznitelik için derleme meta verilerini yoklama.

  2. AssemblyAssociatedContentFileAttribute Özniteliği bulunursa, paket URI'sinin yolu bir içerik dosyasına başvurur.

  3. AssemblyAssociatedContentFileAttribute Özniteliği bulunamazsa, yerel derlemede derlenen küme kaynak dosyalarını araştırın.

  4. Paket URI'sinin yoluyla eşleşen bir kaynak dosyası bulunursa, paket URI'sinin yolu bir kaynak dosyasına başvurur.

  5. Kaynak bulunamazsa, dahili olarak oluşturulan Uri geçersizdir.

URI çözümlemesi, aşağıdakilere başvuran URI'ler için geçerli değildir:

  • Başvuruda bulunılan derlemelerdeki içerik dosyaları: bu dosya türleri WPF tarafından desteklenmez.

  • Başvuruda bulunılan derlemelere eklenmiş dosyalar: Hem başvuruda bulunılan derlemenin ;component adını hem de son ekini içerdiğinden, bunları tanımlayan URI'ler benzersizdir.

  • Kaynak dosyaların sitesi: Bunları tanımlayan URI'ler benzersizdir çünkü siteoforigin:/// yetkilisini içeren paket URI'leri tarafından tanımlanabilen tek dosyalar bunlardır.

Paket URI çözümlemesinin izin verdiği basitleştirmelerden biri, kodun kaynak ve içerik dosyalarının konumlarından biraz bağımsız olmasıdır. Örneğin, yerel derlemede içerik dosyası olarak yeniden yapılandırılmış bir kaynak dosyanız varsa, kaynağın paket URI'si, paket URI'sini kullanan kodla aynı kalır.

Paket URI'leri ile programlama

Birçok WPF sınıfı, aşağıdakiler dahil olmak üzere paket URI'leriyle ayarlanabilen özellikler uygular:

Bu özellikler hem işaretleme hem de koddan ayarlanabilir. Bu bölümde hem temel hem de genel senaryo örnekleri gösterilmektedir.

İşaretlemeyi Paketle URI'lerini Kullanma

Paket URI'si, paket URI'sine sahip bir özniteliğin öğesi ayarlanarak işaretlemede belirtilir. Örnek:

<element attribute="pack://application:,,,/File.xaml" />

Tablo 1'de, işaretlemede belirtebileceğiniz çeşitli mutlak paket URI'leri gösterilmektedir.

Tablo 1: İşaretlemede Mutlak Paket URI'leri

Dosya Mutlak paket URI'si
Kaynak dosyası - yerel derleme "pack://application:,,,/ResourceFile.xaml"
Alt klasörde kaynak dosyası - yerel derleme "pack://application:,,,/Subfolder/ResourceFile.xaml"
Kaynak dosyası - başvuruda bulunılan derleme "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"
Başvuruda bulunılan derlemenin alt klasöründeki kaynak dosyası "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Sürüme başvuruldu derlemedeki kaynak dosyası "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"
İçerik dosyası "pack://application:,,,/ContentFile.xaml"
Alt klasördeki içerik dosyası "pack://application:,,,/Subfolder/ContentFile.xaml"
Kaynak dosya sitesi "pack://siteoforigin:,,,/SOOFile.xaml"
Alt klasördeki kaynak dosyanın sitesi "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

Tablo 2'de, işaretlemede belirtebileceğiniz çeşitli göreli paket URI'leri gösterilmektedir.

Tablo 2: İşaretlemede Göreli Paket URI'leri

Dosya Göreli paket URI'si
Yerel derlemedeki kaynak dosyası "/ResourceFile.xaml"
Yerel derlemenin alt klasöründeki kaynak dosyası "/Subfolder/ResourceFile.xaml"
Başvuruda bulunılan derlemedeki kaynak dosyası "/ReferencedAssembly;component/ResourceFile.xaml"
Başvuruda bulunılan derlemenin alt klasöründeki kaynak dosyası "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
İçerik dosyası "/ContentFile.xaml"
Alt klasördeki içerik dosyası "/Subfolder/ContentFile.xaml"

Kodda Paket URI'lerini Kullanma

sınıfını başlatıp paket URI'sini oluşturucuya Uri parametre olarak geçirerek kodda bir paket URI'si belirtirsiniz. Bu, aşağıdaki örnekte gösterilmiştir.

Uri uri = new Uri("pack://application:,,,/File.xaml");

Varsayılan olarak, Uri sınıf paket URI'lerini mutlak olarak kabul eder. Sonuç olarak, göreli paket URI'siyle sınıfın Uri bir örneği oluşturulduğunda bir özel durum oluşturulur.

Uri uri = new Uri("/File.xaml");

Neyse ki sınıf oluşturucusunun Uri aşırı yüklemesi, Uri(String, UriKind) paket URI'sinin mutlak mı yoksa göreli mi olduğunu belirtmenize olanak sağlamak için türünde UriKind bir parametre kabul eder.

// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml",
                        UriKind.Relative);

Yalnızca Absolute veya Relative sağlanan paket URI'sinin biri veya diğeri olduğundan emin olduğunuzda belirtmeniz gerekir. Kullanılan paket URI'sinin türünü bilmiyorsanız (örneğin, kullanıcı çalışma zamanında bir paket URI'sini girdiğinde) kullanın RelativeOrAbsolute .

// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);

Tablo 3'te kullanarak System.Urikodda belirtebileceğiniz çeşitli göreli paket URI'leri gösterilmektedir.

Tablo 3: Kodda Mutlak Paket URI'leri

Dosya Mutlak paket URI'si
Kaynak dosyası - yerel derleme Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
Alt klasörde kaynak dosyası - yerel derleme Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Kaynak dosyası - başvuruda bulunılan derleme Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
Başvuruda bulunılan derlemenin alt klasöründeki kaynak dosyası Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Sürüme başvuruldu derlemedeki kaynak dosyası Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);
İçerik dosyası Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);
Alt klasördeki içerik dosyası Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
Kaynak dosya sitesi Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
Alt klasördeki kaynak dosyanın sitesi Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

Tablo 4'te kullanarak System.Urikodda belirtebileceğiniz çeşitli göreli paket URI'leri gösterilmektedir.

Tablo 4: Kodda Göreli Paket URI'leri

Dosya Göreli paket URI'si
Kaynak dosyası - yerel derleme Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);
Alt klasörde kaynak dosyası - yerel derleme Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);
Kaynak dosyası - başvuruda bulunılan derleme Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
Alt klasördeki kaynak dosyası - başvuruda bulunılan derleme Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
İçerik dosyası Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
Alt klasördeki içerik dosyası Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

Ortak Paket URI Senaryoları

Önceki bölümlerde kaynak, içerik ve kaynak dosyalarının sitesini tanımlamak için paket URI'lerinin nasıl oluşturılacağı açıklanmıştır. WPF'de, bu yapılar çeşitli şekillerde kullanılır ve aşağıdaki bölümlerde çeşitli yaygın kullanımlar ele alınıyor.

Uygulama Başlatıldığında Gösterilecek Kullanıcı Arabirimini Belirtme

StartupUri BIR WPF uygulamasının ne zaman başlatıldığını göstermek için ilk kullanıcı arabirimini belirtir. Tek başına uygulamalar için kullanıcı arabirimi, aşağıdaki örnekte gösterildiği gibi bir pencere olabilir.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="MainWindow.xaml" />

Aşağıdaki örnekte gösterildiği gibi, tek başına uygulamalar ve XAML tarayıcı uygulamaları (XBAP'ler) ilk kullanıcı arabirimi olarak bir sayfa da belirtebilir.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml" />

Uygulama tek başına bir uygulamaysa ve ile StartupUribir sayfa belirtilirse WPF, sayfayı barındırmak için bir NavigationWindow açar. XBAP'ler için sayfa ana bilgisayar tarayıcısında gösterilir.

Aşağıdaki örnekte bir sayfaya nasıl gidildi gösterilmektedir.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page With Hyperlink"
  WindowWidth="250"
  WindowHeight="250">
<Hyperlink NavigateUri="UriOfPageToNavigateTo.xaml">
  Navigate to Another Page
</Hyperlink>
</Page>

WPF'de gezinmenin çeşitli yolları hakkında daha fazla bilgi için bkz . Gezintiye Genel Bakış.

Pencere Simgesi Belirtme

Aşağıdaki örnekte, bir pencerenin simgesini belirtmek için URI'nin nasıl kullanılacağı gösterilmektedir.

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.MainWindow"
    Icon="WPFIcon1.ico">
</Window>

Daha fazla bilgi için bkz. Icon.

Görüntü, Ses ve Video Dosyalarını Yükleme

WPF, uygulamaların aşağıdaki örneklerde gösterildiği gibi tümü tanımlanıp paket URI'leri ile yüklenebilen çok çeşitli medya türlerini kullanmasına olanak tanır.

<MediaElement Stretch="Fill" LoadedBehavior="Play" Source="pack://siteoforigin:,,,/Media/bee.wmv" />
<MediaElement Stretch="Fill" LoadedBehavior="Play" Source="pack://siteoforigin:,,,/Media/ringin.wav" />
<Image Source="Images/Watermark.png" />

Medya içeriğiyle çalışma hakkında daha fazla bilgi için bkz . Grafikler ve Multimedya.

Kaynak Sitesinden Kaynak Sözlüğü Yükleme

Kaynak sözlükleri (ResourceDictionary), uygulama temalarını desteklemek için kullanılabilir. Tema oluşturmanın ve yönetmenin bir yolu, bir uygulamanın kaynak sitesinde bulunan kaynak sözlükleri olarak birden çok tema oluşturmaktır. Bu, bir uygulamayı yeniden derlemeden ve yeniden dağıtmadan temaların eklenmesini ve güncelleştirilmesini sağlar. Bu kaynak sözlükleri, aşağıdaki örnekte gösterilen paket URI'leri kullanılarak tanımlanabilir ve yüklenebilir.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml">
  <Application.Resources>
    <ResourceDictionary Source="pack://siteoforigin:,,,/PageTheme.xaml" />
  </Application.Resources>
</Application>

WPF'deki temalara genel bakış için bkz . Stil oluşturma ve Şablon Oluşturma.

Ayrıca bkz.