Unterschied von UriKind.Relative und UriKind.Absolute

Möchte man Dateien in einer Windows Phone-Applikation benutzen, muss man diese meist über einen Uniform Resource Identifier (URI) referenzieren. Für einen URI gibt es verschiedene Arten (uriKind). Die drei standardmäßigen sind UriKind.Relative, UriKind.Absolute und UriKind.RelativeOrAbsolute. Ich möchte kurz den Unterschied von UriKind.Relative und UriKind.Absolute zeigen.

Gegeben sei folgende Projekstuktur:

/Images/picture.png
/Pages/MyPage.xaml
/App.xaml
/MainPage.xaml

Möchte man aus der MyPage.xaml die Datei picture.png verwenden, empfiehlt sich folgender URI:

Uri ImagePath = new Uri("../Images/picture.png", UriKind.Relative);

Möchte man dieselbe Datei von der MainPage.xaml aufrufen, sollte die URI so aussehen:

Uri ImagePath = new Uri("Images/picture.png", UriKind.Relative);

Es ist auch ein Aufruf von einer absoluten Adresse möglich. Eine absolute Adresse (UriKind.Absolute) ist unabhängig vom Pfad ihres Aufrufers. Das heißt, dass MainPage.xaml und MyPage.xaml dieselbe Adresse angeben können (obwohl sie in unterschiedlichen Ordner-Ebenen liegen), da die absolute Adresse nicht in Relation zu ihren Pfaden steht:

Uri ImagePath = new Uri("http://www.domain.de/picture.png", UriKind.Absolute);

Mit einem absoluten Pfad kann man auch auf Dateien auf der eigenen Festplatte zeigen. Beispiel:

Uri ImagePath = new Uri(@"C:\Images\picture.png", UriKind.Absolute);

Hinweis 1:
Der Backslash (\) müsste bei einem Pfad eigentlich maskiert werden. Das @ im Beispiel-Ausdruck nimmt diese Maskierung automatisch vor.

Hinweis 2:
Das vollständige Einbinden eines Bildes könnte wie folgt aussehen:
MainPage.xaml

1
2
3
...
<Grid x:Name="LayoutRoot">
</Grid>

MainPage.xaml.cs

1
2
3
4
5
6
7
8
9
...
public MainPage()
{
  InitializeComponent();
  Uri ImagePath = new Uri("Images/picture.png", UriKind.Relative);
  BitmapImage ImageSource = new BitmapImage(ImagePath);
  Image Picture = new Image { Source = ImageSource };
  LayoutRoot.Children.Add(Picture);
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.