Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve Windows Presentation Foundation (WPF) se k identifikaci a načítání souborů používají jednotné identifikátory prostředků (URI) mnoha způsoby, včetně následujících:
Zadání uživatelského rozhraní, které se má zobrazit při prvním spuštění aplikace.
Načítání obrázků
Přechod na stránky
Načítání nespustitelných datových souborů
Identifikátory URI se navíc dají použít k identifikaci a načítání souborů z různých umístění, včetně následujících:
Aktuální sestavení.
Odkazované sestavení.
Umístění ve vztahu k sestavení.
Web původu aplikace.
K zajištění konzistentního mechanismu pro identifikaci a načítání těchto typů souborů z těchto umístění využívá WPF rozšiřitelnost schématu identifikátorů URI balíčku. Toto téma poskytuje přehled schématu, pokrývá, jak sestavit URI balíček pro různé scénáře, diskutuje absolutní a relativní URI a jejich rozlišení, předtím než ukáže, jak používat URI balíček z hlediska značkování i kódu.
Schéma identifikátoru URI balíčku
Schéma identifikátoru URI balíčku se používá ve specifikaci OPC ( Open Packaging Conventions ), která popisuje model pro uspořádání a identifikaci obsahu. Klíčové prvky tohoto modelu jsou balíčky a části, kde je balíček logický kontejner pro jednu nebo více logických částí. Tento koncept znázorňuje následující obrázek.
K identifikaci částí využívá specifikace OPC rozšiřitelnost RFC 2396 (Identifikátory URI): Obecná syntaxe) k definování schématu identifikátorů URI balíčku.
Schéma určené identifikátorem URI je definováno jeho předponou; http, ftp a soubor jsou dobře známé příklady. Schéma identifikátoru URI balíčku používá jako schéma "pack" a obsahuje dvě komponenty: autoritu a cestu. Následuje formát identifikátoru URI balíčku.
pack://authority/cesta
Autorita určuje typ balíčku, v němž je část obsažena, zatímco cesta určuje umístění části v balíčku.
Tento koncept znázorňuje následující obrázek:
Balíčky a části jsou podobné aplikacím a souborům, kde aplikace (balíček) může obsahovat jeden nebo více souborů (částí), včetně:
Soubory prostředků, které jsou kompilované do místního sestavení.
Soubory prostředků kompilované do odkazovaného sestavení.
Soubory prostředků kompilované do referenčního sestavení.
Soubory obsahu.
Web souborů původu
Pro přístup k těmto typům souborů podporuje WPF dva autority: application:/// a siteoforigin:///. Autorita application:/// identifikuje datové soubory aplikace, které jsou známé v době kompilace, včetně souborů prostředků a obsahu. Autorita siteoforigin:/// identifikuje web souborů původu. Rozsah každé autority je znázorněn na následujícím obrázku.
Poznámka:
Součást autority identifikátoru URI balíčku je vložený identifikátor URI, který odkazuje na balíček a musí odpovídat dokumentu RFC 2396. Kromě toho musí být znak "/" nahrazen znakem "," a vyhrazené znaky, jako "%" a "?" musí být ošetřeny. Podrobnosti najdete v OPC.
Následující části vysvětlují, jak pomocí těchto dvou autorit vytvořit identifikátory URI balíčků ve spojení s příslušnými cestami pro identifikaci prostředků, obsahu a souborů místa původu.
Identifikátory URI balíků souborů zdrojů
Soubory prostředků se konfigurují jako položky MSBuild Resource a kompilují se do modulů. WPF podporuje vytváření identifikátorů URI balíčků, které lze použít k identifikaci souborů prostředků, které jsou buď zkompilovány do místního sestavení, nebo kompilovány do sestavení, na které se odkazuje z místního sestavení.
Soubor prostředků lokálního sestavení
Identifikátor URI balíčku pro soubor prostředků zkompilovaný do místního sestavení používá následující autoritu a cestu:
Autorita: application:///.
Cesta: Název souboru prostředků, včetně jeho cesty, relativně ke kořenové složce projektu místního sestavení.
Následující příklad ukazuje URI balíčku pro soubor prostředků XAML, který je umístěn v kořeni složky projektu lokálního sestavení.
pack://application:,,,/ResourceFile.xaml
Následující příklad ukazuje identifikátor URI balíčku pro soubor prostředků XAML umístěný v podsložce složky projektu místního sestavení.
pack://application:,,,/Subfolder/ResourceFile.xaml
Odkazovaný soubor prostředků sestavení
Identifikátor URI balíčku pro soubor prostředků kompilovaný do odkazovaného sestavení používá následující autoritu a cestu:
Autorita: application:///.
Cesta: Název souboru prostředku, který je zkompilován do odkazovaného sestavení. Cesta musí odpovídat následujícímu formátu:
AssemblyShortName{; Verze]{; PublicKey]; component/Path
AssemblyShortName: krátký název odkazovaného sestavení.
; Verze [volitelné]: Verze odkazovaného sestavení, která obsahuje soubor prostředků. Používá se při načtení dvou nebo více odkazovaných sestavení se stejným krátkým názvem.
; PublicKey [volitelné]: veřejný klíč, který byl použit k podepsání odkazovaného sestavení. Používá se při načtení dvou nebo více odkazovaných sestavení se stejným krátkým názvem.
; součást: Určuje, že sestavení, na které odkazuje, je odkazováno z místního sestavení.
/Path: název souboru zdroje, včetně jeho cesty vzhledem ke kořenové složce projektu odkazovaného sestavení.
Následující příklad ukazuje identifikátor URI balíčku pro soubor prostředků XAML umístěný v kořenovém adresáři složky projektu odkazovaného sestavení.
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
Následující příklad ukazuje identifikátor URI balíčku pro soubor prostředků XAML umístěný v podsložce složky projektu odkazovaného sestavení.
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
Následující příklad ukazuje identifikátor URI balíčku pro soubor prostředku XAML, který je umístěn v kořenové složce odkazované složky projektu sestavení specifické pro verzi.
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
Všimněte si, že syntaxe URI balíčku pro soubory prostředků sestavení, na které se odkazuje, lze použít pouze s autoritou application:///. Například následující není podporováno ve WPF.
pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml
Identifikátory URI balíčku souborů obsahu
Identifikátor URI balíčku pro soubor obsahu používá následující autoritu a cestu:
Autorita: application:///.
Cesta: Název souboru obsahu, včetně jeho cesty vzhledem k umístění systému souborů hlavního spustitelného sestavení aplikace.
Následující příklad ukazuje identifikátor URI balíčku pro soubor obsahu XAML umístěný ve stejné složce jako spustitelné sestavení.
pack://application:,,,/ContentFile.xaml
Následující příklad ukazuje identifikátor URI balíčku pro soubor obsahu XAML umístěný v podsložce, která je relativní vzhledem ke spustitelnému sestavení aplikace.
pack://application:,,,/Subfolder/ContentFile.xaml
Poznámka:
Na soubory obsahu HTML nelze přejít. Schéma identifikátoru URI podporuje navigaci pouze k souborům HTML umístěným v lokalitě původu.
URI balíčků z místa původu
Identifikátor URI balíčku pro lokalitu zdrojového souboru používá následující autoritu a cestu:
Autorita: siteoforigin:///.
Cesta: Název lokality zdrojového souboru, včetně jeho cesty vzhledem k umístění, ze kterého bylo spuštěno spustitelné sestavení.
Následující příklad ukazuje identifikátor URI balíčku pro soubor XAML zdrojového původu, který je uložen v umístění, ze kterého je spuštěno spustitelné sestavení.
pack://siteoforigin:,,,/SiteOfOriginFile.xaml
Následující příklad ukazuje URI balíčku pro soubor původu XAML, který je uložen v podsložce relativní k umístění, odkud je spouštěn spustitelný soubor aplikace.
pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml
Stránkové soubory
Soubory XAML, které jsou nakonfigurované jako položky MSBuild Page, se kompilují do sestavení stejným způsobem jako soubory prostředků. V důsledku toho lze položky nástroje MSBuild Page identifikovat pomocí URI balíčků pro soubory prostředků.
Typy souborů XAML, které jsou běžně nakonfigurované jako položky MSBuildPage , mají jeden z následujících prvků jako kořenový prvek:
Absolutní versus relativní identifikátory URI balíčku
Plně kvalifikovaný identifikátor URI balíčku obsahuje schéma, autoritu a cestu a považuje se za absolutní identifikátor URI balíčku. Jako zjednodušení pro vývojáře prvky XAML obvykle umožňují nastavit příslušné atributy s relativním identifikátorem URI balíčku, který zahrnuje pouze cestu.
Představte si například následující absolutní identifikátor URI balíčku pro soubor prostředků v místním sestavení.
pack://application:,,,/ResourceFile.xaml
Identifikátor URI relativního balíčku, který odkazuje na tento soubor prostředků, by byl následující.
/ResourceFile.xaml
Poznámka:
Vzhledem k tomu, že soubory původu webu nejsou přidruženy k sestavením, lze je odkazovat pouze s absolutními identifikátory URI balíčků.
Ve výchozím nastavení se relativní identifikátor URI balíčku považuje za relativní vzhledem k umístění značky nebo kódu, který obsahuje odkaz. Pokud se však použije počáteční zpětné lomítko, je odkaz na identifikátor URI relativního balíčku považován za relativní vzhledem ke kořenovému adresáři aplikace. Představte si například následující strukturu projektu.
App.xaml
Page2.xaml
\SubFolder
+ Page1.xaml
+ Page2.xaml
Pokud Page1.xaml obsahuje identifikátor URI, který odkazuje na root\SubFolder\Page2.xaml, může odkaz použít následující identifikátor URI relativního balíčku.
Page2.xaml
Pokud Page1.xaml obsahuje identifikátor URI, který odkazuje na root\Page2.xaml, může odkaz použít následující identifikátor URI relativního balíčku.
/Page2.xaml
Rozlišení URI balíčku
Formát identifikátorů URI balíčků umožňuje, aby identifikátory URI balíčků pro různé typy souborů vypadaly stejně. Představte si například následující absolutní identifikátor URI balíčku.
pack://application:,,,/ResourceOrContentFile.xaml
Tento absolutní identifikátor URI balíčku může odkazovat buď na soubor prostředků v místním sestavení, nebo na soubor obsahu. Totéž platí pro následující relativní URI.
/ResourceOrContentFile.xaml
Aby bylo možné určit typ souboru, na který odkazuje identifikátor URI balíčku, WPF překládá identifikátory URI pro soubory prostředků v místních sestaveních a soubory obsahu pomocí následujících heuristik:
Zkontrolujte metadata sestavení pro AssemblyAssociatedContentFileAttribute atribut, který odpovídá identifikátoru URI balíčku.
AssemblyAssociatedContentFileAttribute Pokud se atribut najde, cesta identifikátoru URI balíčku odkazuje na soubor obsahu.
Pokud není atribut AssemblyAssociatedContentFileAttribute nalezen, zkontrolujte soubory sady prostředků, které jsou zkompilovány do místního sestavení.
Pokud se najde soubor prostředků, který odpovídá cestě URI balíčku, znamená to, že cesta URI balíčku odkazuje na tento soubor prostředků.
Pokud se prostředek nenajde, interně vytvořený Uri prostředek je neplatný.
Rozlišení identifikátoru URI se nevztahuje na identifikátory URI, které odkazují na následující:
Soubory obsahu v odkazovaných sestaveních: WPF nepodporuje tyto typy souborů.
Vložené soubory v odkazovaných sestaveních: identifikátory URI, které je identifikují, jsou jedinečné, protože obsahují jak název odkazovaného sestavení, tak příponu
;component.Soubory místa původu: URI, které je identifikují, jsou jedinečné, protože jde o jediné soubory, které lze rozpoznat pomocí URI balíčků, jež obsahují autoritu siteoforigin:///.
Jedním ze zjednodušení, které rozlišení identifikátoru URI balíčku umožňuje, je, aby kód byl poněkud nezávislý na umístění prostředků a souborů obsahu. Například pokud máte soubor prostředků v místním sestavení, který je překonfigurován jako soubor obsahu, identifikátor URI balíčku pro prostředek zůstane stejný, stejně jako kód, který tento identifikátor URI používá.
Programování s identifikátory URI balíčků
Mnoho tříd WPF implementuje vlastnosti, které lze nastavit pomocí identifikátorů URI balíčků, včetně:
Tyto vlastnosti lze nastavit z označovacího jazyka i kódu. Tato část ukazuje základní konstrukce pro obě a pak ukazuje příklady běžných scénářů.
Použití identifikátorů URI balíčků v označení
Identifikátor URI balíčku je zadán v kódu nastavením elementu atributu s identifikátorem URI balíčku. Například:
<element attribute="pack://application:,,,/File.xaml" />
Tabulka 1 znázorňuje různé identifikátory URI absolutního balíčku, které můžete zadat v kódu.
Tabulka 1: Absolutní identifikátory URI balíčku v označení
| Soubor | Absolutní identifikátor URI balíčku |
|---|---|
| Soubor prostředků – místní sestavení | "pack://application:,,,/ResourceFile.xaml" |
| Soubor zdrojů v podsložce – místní sestavení | "pack://application:,,,/Subfolder/ResourceFile.xaml" |
| Soubor prostředků – referencované sestavení | "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml" |
| Soubor prostředků v podsložce referencovaného sestavení | "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml" |
| Soubor prostředků v odkazovaném sestavení s verzemi | "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml" |
| Soubor obsahu | "pack://application:,,,/ContentFile.xaml" |
| Soubor obsahu v podsložce | "pack://application:,,,/Subfolder/ContentFile.xaml" |
| Web zdrojového souboru | "pack://siteoforigin:,,,/SOOFile.xaml" |
| Web zdrojového souboru v podsložce | "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml" |
Tabulka 2 znázorňuje různé identifikátory URI relativního balíčku, které můžete zadat v kódu.
Tabulka 2: Relativní URI balíčků v označení
| Soubor | Relativní URI balíčku |
|---|---|
| Soubor prostředků v místním sestavení | "/ResourceFile.xaml" |
| Soubor prostředků v podsložce lokální montáže | "/Subfolder/ResourceFile.xaml" |
| Soubor prostředků v odkazovaném sestavení | "/ReferencedAssembly;component/ResourceFile.xaml" |
| Soubor prostředků v podsložce referencovaného sestavení | "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml" |
| Soubor obsahu | "/ContentFile.xaml" |
| Soubor obsahu v podsložce | "/Subfolder/ContentFile.xaml" |
Použití identifikátorů URI balíčků v kódu
Identifikátor URI balíčku zadáte v kódu vytvořením instance Uri třídy a předáním identifikátoru URI balíčku jako parametr konstruktoru. To je znázorněno v následujícím příkladu.
Uri uri = new Uri("pack://application:,,,/File.xaml");
Ve výchozím nastavení Uri třída považuje identifikátory URI balíčků za absolutní. V důsledku toho je vyvolána výjimka při vytvoření instance třídy Uri s relativním pack URI.
Uri uri = new Uri("/File.xaml");
Naštěstí přetížení Uri(String, UriKind) konstruktoru třídy Uri přijímá parametr typu UriKind, který vám umožní určit, zda je identifikátor URI balíčku absolutní nebo relativní.
// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml",
UriKind.Relative);
Měli byste zadat pouze Absolute nebo Relative pokud jste si jisti, že zadaný identifikátor URI balíčku je jeden nebo druhý. Pokud neznáte typ identifikátoru URI balíčku, který se používá, například když uživatel za běhu zadá identifikátor URI balíčku, použijte RelativeOrAbsolute místo toho.
// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);
Tabulka 3 znázorňuje různé identifikátory URI relativního balíčku, které můžete zadat v kódu pomocí System.Uri.
Tabulka 3: Absolutní identifikátory URI balíčku v kódu
| Soubor | Absolutní identifikátor URI balíčku |
|---|---|
| Soubor prostředků – místní sestavení | Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute); |
| Soubor zdrojů v podsložce – místní sestavení | Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute); |
| Soubor prostředků – referencované sestavení | Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute); |
| Soubor prostředků v podsložce referencovaného sestavení | Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute); |
| Soubor prostředků v odkazovaném sestavení s verzemi | Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute); |
| Soubor obsahu | Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute); |
| Soubor obsahu v podsložce | Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute); |
| Web zdrojového souboru | Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute); |
| Web zdrojového souboru v podsložce | Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute); |
Tabulka 4 znázorňuje různé identifikátory URI relativního balíčku, které můžete zadat v kódu pomocí System.Uri.
Tabulka 4: Relativní URI balíku v kódu
| Soubor | Relativní URI balíčku |
|---|---|
| Soubor prostředků – místní sestavení | Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative); |
| Soubor zdrojů v podsložce – místní sestavení | Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative); |
| Soubor prostředků – referencované sestavení | Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative); |
| Soubor prostředků v podsložce – sestavení, na které se odkazuje | Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative); |
| Soubor obsahu | Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative); |
| Soubor obsahu v podsložce | Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative); |
Běžné scénáře s Pack URI
V předchozích částech jsme probrali, jak vytvořit identifikátory URI balíčků pro identifikaci prostředků, obsahu a webů zdrojových souborů. Ve WPF se tyto konstrukce používají různými způsoby a následující části pokrývají několik běžných použití.
Zadání uživatelského rozhraní, které se má zobrazit při spuštění aplikace
StartupUri určuje první uživatelské rozhraní, které se má zobrazit při spuštění aplikace WPF. U samostatných aplikací může být uživatelské rozhraní oknem, jak je znázorněno v následujícím příkladu.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="MainWindow.xaml" />
Samostatné aplikace a aplikace prohlížeče XAML (XBAPs) můžou také zadat stránku jako počáteční uživatelské rozhraní, jak je znázorněno v následujícím příkladu.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="HomePage.xaml" />
Pokud je aplikace samostatnou aplikací a je zadána stránka s StartupUri, WPF otevře NavigationWindow pro hostování stránky. U XBAPs se stránka zobrazí v prohlížeči hostitele.
Přechod na stránku
Následující příklad ukazuje, jak přejít na stránku.
<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>
Další informace o různých způsobech navigace ve WPF naleznete v části Přehled navigace.
Určení ikony okna
Následující příklad ukazuje, jak pomocí identifikátoru URI určit ikonu okna.
<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>
Další informace najdete v tématu Icon.
Načítání obrázků, zvukových souborů a videosouborů
WPF umožňuje aplikacím používat širokou škálu typů médií, z nichž všechny lze identifikovat a načíst pomocí identifikátorů URI balíčků, jak je znázorněno v následujících příkladech.
<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" />
Další informace o práci s multimediálním obsahem naleznete v tématu Grafika a multimédia.
Načtení slovníku prostředků z původního webu
Slovníky prostředků (ResourceDictionary) je možné použít k podpoře motivů aplikací. Jedním ze způsobů, jak vytvářet a spravovat motivy, je vytvořit více motivů jako slovníky prostředků, které se nacházejí na webu původu aplikace. To umožňuje přidávat a aktualizovat motivy bez opětovného zkompilování a opětovného nasazení aplikace. Tyto slovníky lze identifikovat a načíst pomocí balíčkových URI, což je znázorněno v následujícím příkladu.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="HomePage.xaml">
<Application.Resources>
<ResourceDictionary Source="pack://siteoforigin:,,,/PageTheme.xaml" />
</Application.Resources>
</Application>
Přehled motivů ve WPF najdete v tématu Styling a Šablonování.
Viz také
.NET Desktop feedback