Sbalení URI v technologii WPF
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í vzhledem 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 obsahuje přehled schématu, který popisuje, jak sestavit identifikátory URI balíčků pro různé scénáře, popisuje absolutní a relativní identifikátory URI a rozlišení identifikátorů URI před zobrazením použití identifikátorů URI balíčků z revizí 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.
cesta k pack:// authority/
Autorita určuje typ balíčku, který je součástí, 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ů kompilované do místního sestavení.
Soubory prostředků kompilované do odkazovaného sestavení.
Soubory prostředků kompilované do odkazující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 je například "%" a "?" musí být uchycené. Podrobnosti najdete v OPC.
Následující části vysvětlují, jak pomocí těchto dvou citací vytvořit identifikátory URI balíčků ve spojení s příslušnými cestami pro identifikaci prostředků, obsahu a webu zdrojových souborů.
Identifikátory URI balíčku souborů prostředků
Soubory prostředků jsou nakonfigurovány jako položky NÁSTROJE MSBuild Resource
a jsou zkompilovány do sestavení. 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ů místní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, vzhledem k kořenové složce projektu místního sestavení.
Následující příklad ukazuje identifikátor URI balíčku pro soubor prostředků XAML, který je umístěn v kořenovém adresáři složky projektu místní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.
;P ublicKey [volitelné]: veřejný klíč 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 identifikátoru URI balíčku pro odkazované soubory prostředků sestavení 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:
Soubory obsahu HTML nelze přejít na. Schéma identifikátoru URI podporuje navigaci pouze k souborům HTML umístěným v lokalitě původu.
Identifikátory URI balíčku 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 web XAML zdrojového souboru, který je uložen v umístění, ze kterého je spuštěn spustitelné sestavení.
pack://siteoforigin:,,,/SiteOfOriginFile.xaml
Následující příklad ukazuje identifikátor URI balíčku pro lokalitu XAML zdrojového souboru, který je uložen v podsložce vzhledem k umístění, ze kterého je spuštěn spustitelné sestavení aplikace.
pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml
Stránkové soubory
Soubory XAML nakonfigurované jako položky NÁSTROJE MSBuild Page
se kompilují do sestavení stejným způsobem jako soubory prostředků. V důsledku toho lze identifikovat položky NÁSTROJE MSBuild Page
pomocí identifikátorů 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í identifikátoru 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í identifikátor URI.
/ResourceOrContentFile.xaml
Aby bylo možné určit typ souboru, na který odkazuje identifikátor URI balíčku, wpF přeloží identifikátory URI pro soubory prostředků v místních sestaveních a souborech obsahu pomocí následujících heuristiky:
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.
AssemblyAssociatedContentFileAttribute Pokud atribut nebyl nalezen, zkontrolujte soubory prostředků sady, které jsou zkompilovány do místního sestavení.
Pokud se najde soubor prostředků, který odpovídá cestě identifikátoru URI balíčku, cesta identifikátoru URI balíčku odkazuje na 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
.Web souborů původu: Identifikátory URI, které je identifikují, jsou jedinečné, protože jde o jediné soubory, které lze identifikovat pomocí identifikátorů URI balíčků, které 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. Pokud například máte soubor prostředků v místním sestavení, které je překonfigurováno jako soubor obsahu, identifikátor URI balíčku pro prostředek zůstane stejný jako kód, který používá identifikátor URI balíčku.
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 revizí 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 revizích
Identifikátor URI balíčku je zadán v kódu nastavením elementu atributu s identifikátorem URI balíčku. Pří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 revizích
Soubor | Absolutní identifikátor URI balíčku |
---|---|
Soubor prostředků – místní sestavení | "pack://application:,,,/ResourceFile.xaml" |
Soubor prostředků v podsložce – místní sestavení | "pack://application:,,,/Subfolder/ResourceFile.xaml" |
Soubor prostředků – odkazované sestavení | "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml" |
Soubor prostředků v podsložce odkazovaného sestavení | "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml" |
Soubor prostředků ve verzích odkazovaném sestavení | "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: Identifikátory URI relativního balíčku v revizích
Soubor | Identifikátor URI relativního balíčku |
---|---|
Soubor prostředků v místním sestavení | "/ResourceFile.xaml" |
Soubor prostředků v podsložce místního sestavení | "/Subfolder/ResourceFile.xaml" |
Soubor prostředků v odkazovaném sestavení | "/ReferencedAssembly;component/ResourceFile.xaml" |
Soubor prostředků v podsložce odkazované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 patrné z následujícího 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 Uri třídy s relativním identifikátorem URI balíčku.
Uri uri = new Uri("/File.xaml");
Přetížení konstruktoru Uri třídy naštěstí přijímá parametr typuUriKind, který vám umožní určit, Uri(String, UriKind) 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 prostředků v podsložce – místní sestavení | Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute); |
Soubor prostředků – odkazované sestavení | Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute); |
Soubor prostředků v podsložce odkazovaného sestavení | Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute); |
Soubor prostředků ve verzích odkazovaném sestavení | 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: Identifikátory URI relativního balíčku v kódu
Soubor | Identifikátor URI relativního balíčku |
---|---|
Soubor prostředků – místní sestavení | Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative); |
Soubor prostředků v podsložce – místní sestavení | Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative); |
Soubor prostředků – odkazované sestavení | Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative); |
Soubor prostředků v podsložce – odkazované sestavení | 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 identifikátoru URI balíčku
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 na webu 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 webu původu
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 prostředků je možné identifikovat a načíst pomocí identifikátorů URI balíčků, které jsou znázorněny 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