Wie muss man
this in einer globalen statischen Methode ersetzen?
Ich habe eine lokale Methode eine globale, statische
Funktion/Methode umgewandelt, damit ich die Methode überall aufrufen kann.
Leider ist beim Bilden einer StorageFile die Verwendung von this notwendig in this.BaseUri.
Frage:
Wie muss ich hier this
ersetzen?
Lösung:
Umwandeln des this.BaseUri in Pfad-String mit anschliessendem
UriKind
Die Verwendung von this innerhalb der Mainpage bezieht sich
auf die aktuelle Instanz der Seite.
Oder anders gesagt: wenn die Seite Mainpage geöffnet wird,
dann ist this genau dieses Objekt oder Klasse.
Insofern ist this.BaseUri einfach der absolute Datei-Pfad zu
dieser Klasse im Filesystem. Man muss also ebenfalls den Pfad verwenden, wo man
sich gerade als Datei befindet und von dort weiter rechnen.
Ausgabe
Direktfenster:
new
Uri("ms:appx///Assets/_Images/_Sys/icFolder.png",UriKind.RelativeOrAbsolute)
{ms:appx///Assets/_Images/_Sys/icFolder.png}
AbsolutePath: "appx///Assets/_Images/_Sys/icFolder.png"
AbsoluteUri: "ms:appx///Assets/_Images/_Sys/icFolder.png"
Authority:
""
DnsSafeHost: ""
Fragment: ""
Host:
""
HostNameType: Unknown
IdnHost:
""
IsAbsoluteUri: true
IsDefaultPort: true
IsFile:
false
IsLoopback: false
IsUnc:
false
LocalPath: "appx///Assets/_Images/_Sys/icFolder.png"
OriginalString: "ms:appx///Assets/_Images/_Sys/icFolder.png"
PathAndQuery: "appx///Assets/_Images/_Sys/icFolder.png"
Port: -1
Query:
""
Scheme:
"ms"
Segments: {string[7]}
UserEscaped:
false
UserInfo: ""
|
new Uri("ms:appx///Assets/_Images/_Sys/icFolder.png",
UriKind.RelativeOrAbsolute));
Am Beispiel in der ausgelagerten Methode:
public async static Task <BitmapImage> load_SysImage(string sys_ImageName)
{
//------------<
fl_set_Setting() >------------
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri"ms:appx///Assets/_Images/_Sys/icFolder.png",
UriKind.RelativeOrAbsolute));
IRandomAccessStream fileStream = await
file.OpenAsync(Windows.Storage.FileAccessMode.Read);
BitmapImage bmpImage = new BitmapImage();
bmpImage.SetSource(fileStream);
return bmpImage;
//------------</
fl_set_Setting() >------------
}
|
Im Fall der Anwendung als Dateien kann man this.BaseUri
austauschen mit ms-appx:///Pfad als string mit einem anschließenden UriKind
Verwendung innerhalb
von MainPage, wo this.BaseUri funktioniert
Referenz:
FrameworkElement.BaseUri
Property
Der Basis-URI für ein Objekt zur XAML-Ladezeit.
https://msdn.microsoft.com/library/windows/apps/br208712
Beispiel:
CapturedPhoto.Source = new BitmapImage(new Uri(this.BaseUri,
"Assets/placeholder-sdk.png"));
this ist die aktuelle
Instanz der Klasse
Das this-Schlüsselwort
verweist auf die aktuelle Instanz der Klasse und wird auch als Modifizierer des
ersten Parameters einer Erweiterungsmethode verwendet.
https://msdn.microsoft.com/de-de/library/dk1507sz.aspx
Beipsiel BaseUri in MapLauncher
private static string baseUri = "bingmaps:?";
"The BaseUri must begin with http://, https://,
ms-appx:///, or ms-appdata:///local/."