WPF İçinde URI'leri Paketleme

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

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

  • Görüntüleri yükleme.

  • Sayfalara gezinme.

  • Yürütülebilir olmayan veri dosyalarını yükleme.

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

  • Geçerli derleme.

  • Başvurulan bir derleme.

  • Bir derlemeye göre konum.

  • Uygulamanın kaynak sitesi.

WPF, bu tür dosyaları bu konumlardan tanımlamak ve yüklemeye yönelik tutarlı bir mekanizma sağlamak için, paket URI şemasının genişletilebilirliğini kullanır. Bu konu, şemaya genel bir bakış sağlar, çeşitli senaryolar için paket URI'leri oluşturma konusunu kapsar, hem işaretleme hem de koddan paket URI'lerini kullanmayı göstermeden önce mutlak ve göreli URI'leri ve URI çözümlemeyi ele almaktadır.

Paket URI Şeması

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, bir paketin bir veya daha fazla mantıksal parçası için mantıksal bir kapsayıcı olduğu paketler ve parçalardır. Aşağıdaki şekil bu kavramı gösterir.

Package and Parts diagram

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

Bir URI tarafından belirtilen şema, ön eki tarafından tanımlanır; http, ftp ve dosya iyi bilinen örneklerdir. Paket URI düzeni, şeması olarak "pack" kullanır ve iki bileşen içerir: yetki ve yol. Aşağıda, bir paket URI'sı biçimi ve ardından görüntülenir.

pack://yolu

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

Bu kavram aşağıdaki şekilde gösterildiği gibi:

Relationship among package, authority, and path

Paketler ve parçalar, bir uygulamanın (paket) aşağıdakiler dahil olmak üzere bir veya daha fazla dosya (parça) dahil olduğu uygulamalara ve dosyalara benzer:

  • Yerel derlemede derlenmiş kaynak dosyaları.

  • Başvurulan bir derlemede derlenmiş kaynak dosyaları.

  • Başvuru derlemesine derlenmiş kaynak dosyaları.

  • İçerik dosyaları.

  • Kaynak dosyalarını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. Kaynak siteoforigin:/// kaynak dosyalarının sitesini tanımlar. Her bir yetkilinin kapsamı aşağıdaki şekilde gösterilmiştir.

Pack URI diagram

Not

Bir paket URI'sini yetkili bileşeni, bir paketin olduğunu ve RFC 2396'ya uyması gereken katıştırılmış bir URI'dir. Buna ek olarak, "/" karakteri "," karakteriyle değiştir olmalı ve "%" ve "?" gibi ayrılmış karakterlerin kaçmalıdır. Ayrıntılar için bkz. OPC.

Aşağıdaki bölümlerde kaynak, içerik ve kaynak dosyalarının sitesini tanımlamaya yönelik uygun yollarla birlikte bu iki yetkiliyi kullanarak paket URL'leri oluşturma adımları açıklanmaktadır.

Kaynak Dosya Paketi URL'leri

Kaynak dosyaları, kaynak MSBuild Resource olarak yapılandırılır ve derlemelere derlenmiş olur. WPF, yerel derlemede derlenmiş veya yerel derlemeden başvurulan bir derlemede derlenmiş kaynak dosyalarını tanımlamak için kullanılan paket URL'lerinin derlenişlerini destekler.

Yerel Derleme Kaynak Dosyası

Yerel derlemede derlenmiş bir kaynak dosyasının paket URI'si aşağıdaki yetkiyi 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şvurulan Derleme Kaynak Dosyası

Başvurulan bir derlemede derlenmiş bir kaynak dosyasının paket URI'si aşağıdaki yetkiyi ve yolu kullanır:

  • Yetkili:application:///.

  • Yol:Başvurulan derlemede derlenmiş bir kaynak dosyasının adı. Yol aşağıdaki biçime uygun olmalıdır:

    AssemblyShortName{; Sürüm]{; PublicKey];component/Path

    • AssemblyShortName:Başvurulan derlemenin kısa adı.

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

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

    • ;bileşen:Başvurulan derlemeye yerel derlemeden başvurul olduğunu belirtir.

    • /Path:Başvurulan 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şvurulan 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şvurulan 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 örnek, başvurulan, sürüme özgü derlemenin proje klasörünün kök klasöründe bulunan bir XAML kaynak dosyasının paket URI'sini gösterir.

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

Başvurulan derleme kaynak dosyaları için paket URI söz dizimi yalnızca kaynak yetkilisiyle application:/// unutmayın. Örneğin, WPF'de aşağıdakiler desteklenmiyor.

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

İçerik Dosya Paketi URL'leri

İçerik dosyasının paket URI'si aşağıdaki yetkiyi ve yolu kullanır:

  • Yetkili:application:///.

  • Yol:uygulamanın ana yürütülebilir derlemesi dosya sistemi konumuyla ilgili 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ı için paket URI'sını gösterir.

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

Aşağıdaki örnek, uygulamanın yürütülebilir derlemesi ile ilişkili bir alt klasör içinde bulunan bir XAML içerik dosyasının paket URI'sını gösterir.

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

Not

HTML içerik dosyalarına gidi olamaz. URI şeması yalnızca kaynak sitede bulunan HTML dosyalarına gezintiyi destekler.

Kaynak Paketi URL'leri Sitesi

Kaynak dosyanın bir sitesi için paket URI'si aşağıdaki yetkiyi ve yolu kullanır:

  • Yetkili:siteoforigin:///.

  • Yol:Yürütülebilir derlemenin başlat olduğu konuma göre yolu da dahil olmak üzere kaynak dosyanın sitesi adı.

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

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

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

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

Sayfa Dosyaları

Derleme öğeleri olarak yapılandırılan XAML Page MSBuild, kaynak dosyalarıyla aynı şekilde derlemelere derlenmiş. Sonuç olarak, MSBuild Page öğeleri kaynak dosyaları için paket URL'leri kullanılarak belirlenebilirsiniz.

Bir öğe olarak yaygın olarak yapılandırılan XAML MSBuild, kök öğesi Page olarak aşağıdakilerden birini içerir:

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

Tam paket URI'sı şemayı, yetkiliyi ve yolu içerir ve mutlak paket URI'si olarak kabul edilir. Geliştiriciler için basitleştirme olarak, XAML öğeleri genellikle yalnızca yolu içeren bir göreli paket URI'sine sahip uygun öznitelikleri ayarlamanızı sağlar.

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

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

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

/ResourceFile.xaml

Not

Kaynak dosyaların sitesi derlemelerle ilişkili değildir, yalnızca mutlak paket URL'leri ile başvurulabilirsiniz.

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

App.xaml

Page2.xaml

\SubFolder

+ Page1.xaml

+ Page2.xaml

Page1.xaml, Root\SubFolder\Page2.xaml dizinine başvurulan bir URI içeriyorsa, başvuru aşağıdaki göreli paket URI'sını kullanabilir.

Page2.xaml

Page1.xaml, Kök\Page2.xaml'e başvurulan bir URI içeriyorsa, başvuru aşağıdaki göreli paket URI'lerini kullanabilir.

/Page2.xaml

Paket URI Çözümlemesi

Paket URL'lerinin biçimi, farklı dosya türleri için paket URL'lerinin aynı şekilde biçimlendirilmiş olmasına neden olur. Örneğin, aşağıdaki mutlak paket URI'sını göz önünde bulundurur.

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

Bu mutlak paket URI'si, yerel derlemede bir kaynak dosyasına veya bir içerik dosyasına başvurur. Aynı durum aşağıdaki göreli URI için de doğrudur.

/ResourceOrContentFile.xaml

WpF, bir paket URI'sinde başvurulduğu dosyanın türünü belirlemek için yerel derlemelerde ve içerik dosyalarında kaynak dosyaları için URI'leri aşağıdaki yöntem kullanarak çözümler:

  1. Paket AssemblyAssociatedContentFileAttribute URI'si ile eşleşen bir öznitelik için derleme meta verilerini yoklama.

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

  3. Öznitelik AssemblyAssociatedContentFileAttribute bulunamasa, yerel derlemede derlenmiş olan ayarlanmış kaynak dosyalarını yoklar.

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

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

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

  • Başvurulan derlemelerde içerik dosyaları: Bu dosya türleri WPF tarafından desteklenmiyor.

  • Başvurulan derlemelerde katıştırılmış dosyalar: Kendilerini tanıtan ÜR'ler, başvurulan derlemenin adını ve son eklerini içermeleri ;component nedeniyle benzersizdir.

  • Kaynak dosyaların sitesi: Kaynak yetkilisini içeren paket URI'leri tarafından tanımlan yalnızca bunlar olduğundan bunları siteoforigin:///.

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

Paket URL'leri ile programlama

Birçok WPF sınıfı, paket URL'leri ile ayarlansa da şu özelliklere sahiptir:

Bu özellikler hem işaretleme hem de koddan ayarlanabilir. Bu bölümde her ikisine de temel yapılar ve ardından yaygın senaryo örnekleri verilmiştir.

İşaretlemede Paket URL'lerini Kullanma

Bir özniteliğin öğesi paket URI'sinde ayarlanıp işaretlemede bir paket URI'sı belirtilir. Örneğin:

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

Tablo 1'de işaretlemede belirtebilirsiniz çeşitli mutlak paket URL'leri gösterir.

Tablo 1: İşaretlemede Mutlak Paket URL'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şvurulan derleme "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"
Başvurulan derlemenin alt klasördeki kaynak dosyası "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Sürüm başvurulan derlemede kaynak dosyası "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"
İçerik dosyası "pack://application:,,,/ContentFile.xaml"
Alt klasöre içerik dosyası "pack://application:,,,/Subfolder/ContentFile.xaml"
Kaynak dosyasının sitesi "pack://siteoforigin:,,,/SOOFile.xaml"
Alt klasör içinde kaynak dosyanın sitesi "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

Tablo 2'de işaretlemede belirtebilirsiniz çeşitli göreli paket URL'leri gösterir.

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

Dosya Göreli paket URI'si
Yerel derlemede kaynak dosyası "/ResourceFile.xaml"
Yerel derlemenin alt klasörlerinde kaynak dosyası "/Subfolder/ResourceFile.xaml"
Başvurulan derlemedeki kaynak dosyası "/ReferencedAssembly;component/ResourceFile.xaml"
Başvurulan derlemenin alt klasördeki kaynak dosyası "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
İçerik dosyası "/ContentFile.xaml"
Alt klasöre içerik dosyası "/Subfolder/ContentFile.xaml"

Kodda Paket URL'lerini Kullanma

Sınıf örneğini başlatarak ve paket URI'sını oluşturucuya parametre olarak aktararak kodda bir Uri paket URI'si belirtirsiniz. Bu, aşağıdaki örnekte gösterilmiştir.

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

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

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

Neyse ki, sınıf oluşturucusu aşırı yüklemesi, bir paket URI'lerinin mutlak mı yoksa göreli mi olduğunu belirtmenize olanak Uri(String, UriKind) sağlayan türünde bir parametre kabul UriUriKind 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 veya sağlanan Absolute paket Relative URI'si'nin bunlardan biri veya diğeri olduğunu belirttiğinizde belirtmeniz gerekir. Kullanıcı çalışma zamanında bir paket URI'sine girdiği gibi, kullanılan paket URI'si türünü bilmiyorsanız, bunun yerine RelativeOrAbsolute kullanın.

// 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, kullanarak kodda belirtebilirsiniz çeşitli göreli paket URL'lerini System.Uri gösterir.

Tablo 3: Kodda Mutlak Paket URL'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şvurulan derleme Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
Başvurulan derlemenin alt klasördeki kaynak dosyası Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Sürüm başvurulan derlemede 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öre içerik dosyası Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
Kaynak dosyasının sitesi Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
Alt klasör içinde kaynak dosyanın sitesi Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

Tablo 4, kullanarak kodda belirtebilirsiniz çeşitli göreli paket URL'lerini System.Uri gösterir.

Tablo 4: Koddaki Göreli Paket URL'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şvurulan derleme Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
Alt klasördeki kaynak dosyası - başvurulan derleme Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
İçerik dosyası Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
Alt klasöre içerik dosyası Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

Ortak Paket URI Senaryoları

Önceki bölümlerde kaynak dosyalarının kaynağını, içeriğini ve sitesini tanımlamak için paket URL'lerinin nasıl yapıltığı ele alınmıştır. WPF'de bu yapıtlar çeşitli yollarla kullanılır ve aşağıdaki bölümlerde yaygın kullanımlar yer almaktadır.

Uygulama Başlatıldığında Göster kullanıcı arabirimini belirtme

StartupUri , bir WPF uygulamasının ne zaman başlatıl olduğunu gösterecek 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 uygulama ise ve ile bir sayfa belirtilirse StartupUri WPF, sayfayı NavigationWindow barındırmak için bir açar. XBAP'ler için sayfa konak tarayıcısında gösterilir.

Aşağıdaki örnek, bir sayfaya nasıl gidileni gösterir.

<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ımı gösterilir.

<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 çok çeşitli medya türlerini kullanmalarını sağlar. Bunların hepsi aşağıdaki örneklerde gösterildiği gibi paket URL'leri ile tanımlanıp yüklenebilir.

<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 derlemeden temaların eklenmesine ve güncelleştiriline olanak sağlar. Bu kaynak sözlükleri, aşağıdaki örnekte gösterilen paket URL'leri kullanılarak tanımlanıp 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 şablonoluşturma.

Ayrıca bkz.