PackUriHelper.Create Method (Uri, Uri, String)

Creates a pack URI given a Package URI, the URI of a part in the package, and a "#" fragment to append.

Namespace:  System.IO.Packaging
Assembly:  WindowsBase (in WindowsBase.dll)

public static Uri Create(
	Uri packageUri,
	Uri partUri,
	string fragment
)

Parameters

packageUri
Type: System.Uri
The URI of the Package.
partUri
Type: System.Uri
The URI of the PackagePart in the package.
fragment
Type: System.String
A "#" reference identifying an element within the package part.

Return Value

Type: System.Uri
The pack URI that identifies the specified package, package part, and fragment.

ExceptionCondition
ArgumentNullException

packageUri is null.

ArgumentException

packageUri is not an absolute URI.

-or-

partUri is not a valid part URI syntax.

-or-

fragment is empty or does begin with "#".

packageUri may not be specified as null or empty.

If partUri is null, the returned pack URI points to the package.

fragment cannot be an empty string but can be specified as null. When not specified as null, the fragment string must begin with a '#' character. For more information of the syntax of fragment references, see Section 3.5 "Fragment" of RFC 3986.

The following table illustrates sample cases for the Create method.

 packageUri

 partUri

 fragment

 Returned pack URI

 http://www.proseware.com/mypackage.pkg 

 /page1.xaml 

 #intro 

 pack://http:,,www.proseware.com,mypackage.pkg/page1.xaml#intro 

 http://www.proseware.com/mypackage.pkg 

 /page2.xaml 

 null 

 pack://http:,,www.proseware.com,mypackage.pkg/page2.xaml 

 http://www.proseware.com/mypackage.pkg 

 /a/page4.xaml 

 null 

 pack://http:,,www.proseware.com,mypackage.pkg/a/page4.xaml 

 http://www.proseware.com/mypackage.pkg 

 /%41/%61.xml 

 null 

 pack://http:,,www.proseware.com,mypackage.pkg/A/a.xml 

 http://www.proseware.com/mypackage.pkg 

 /%25XY.xml 

 null 

 pack://http:,,www.proseware.com,mypackage.pkg/%25XY.xml 

 http://www.proseware.com/mypackage.pkg 

 /a/page5.xaml 

 #summary

 pack://http:,,www.proseware.com,mypackage.pkg/a/page5.xaml#summary 

 http://www.proseware.com/packages.aspx?pkg04 

 /page1.xaml 

 #intro 

 pack://http:,,www.proseware.com,packages.aspx%3fpkg04/page1.xaml#intro 

 http://www.proseware.com/mypackage.pkg 

 null 

 null 

 pack://http:,,www.proseware.com,mypackage.pkg 

 ftp://ftp.proseware.com/packages/mypackage1.abc 

 /a/mydoc.xaml 

 null 

 pack://ftp:,,ftp.proseware.com,packages,mypackage1.abc/a/mydoc.xaml 

 file:///d:/packages/mypackage2.pkg 

 /a/bar.xaml 

 #xref 

 pack://file:,,,d:,packages,mypackage2.pkg/a/bar.xaml#xref 

Composing a pack URI is a multi-step process. For example, one step in forming a pack URI is to replace the forward slash (/) characters of the packageUri with commas (,).

For more information on string conversion and how pack URIs are formed, see Appendix A.4 "String Conversion Examples" and Appendix B.3 "Composing a Pack URI" in the Open Packaging Conventions specification available for download at Specifications and License Downloads.

The following example shows how to use the Create(Uri) method to define a pack URI that references a package.


// ------------------------ GetFixedDocument --------------------------
/// <summary>
///   Returns the fixed document at a given URI within
///   the currently open XPS package.</summary>
/// <param name="fixedDocUri">
///   The URI of the fixed document to return.</param>
/// <returns>
///   The fixed document at a given URI
///   within the current XPS package.</returns>
private FixedDocument GetFixedDocument(Uri fixedDocUri)
{
    FixedDocument fixedDocument = null;

    // Create the URI for the fixed document within the package. The URI
    // is used to set the Parser context so fonts & other items can load.
    Uri tempUri = new Uri(_xpsDocumentPath, UriKind.RelativeOrAbsolute);
    ParserContext parserContext = new ParserContext();
    parserContext.BaseUri = PackUriHelper.Create(tempUri);

    // Retreive the fixed document.
    PackagePart fixedDocPart = _xpsPackage.GetPart(fixedDocUri);
    if (fixedDocPart != null)
    {
        object fixedObject =
            XamlReader.Load(fixedDocPart.GetStream(), parserContext);
        if (fixedObject != null)
            fixedDocument = fixedObject as FixedDocument;
    }

    return fixedDocument;
}// end:GetFixedDocument()


.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft