PivotViewer

Wysyłając aplikację PivotViewer na swój serwer DropBox zdałem sobie sprawę, że będzie problem ze ścieżką do kolekcji. Zmienianie statycznej ścieżki, która jest zawarta w pliku .xap nie wydało się takim fantastycznym pomysłem. Za każdym razem gdybym chciał pokazać swoją aplikacje musiałbym ją edytować?
Nie ma mowy. Jak to można rozwiązać.

Rozwiązanie znalezione w sieci

Oczywiście najpierw przeszukałem sieć. Rozwiązanie, na które się natknąłem wygląda mnie więcej tak.

string path = App.Current.Host.InitParams["sciezka"].ToString();
PivotViewerControl.LoadCollection(path, string.Empty);

Ścieżkę do pliku można pobrać z parametrów, które są podawane w pliku .html (w deklaracji obiektu Silverlight). Edycja pliku .html wymaga tylko notatnika więc rozwiązuje to problem częściowo.

Jednak wciąż musiałbym sam znać ścieżkę i edytować plik więc postanowiłem pomyśleć. Chociaż nauczyłem się czegoś nowego kiedyś może wykorzystam “InitParams” .

InitParams

Moje własne rozwiązanie

Pomyślałem - na pewno musi istnieć jakieś lepsze rozwiązanie. Na pewno można jakość przechwycić ścieżkę dynamicznie za pomocą kodu. Nic później nie trzeba byłoby zmieniać bo ten kod zawsze zadziała.

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
   string url = App.Current.Host.Source.AbsoluteUri;
   int s = url.Length - "PivotCollection.xap".Length;
   url = url.Remove(s);
   url += "AmigaGames.cxml";
   PivotViewerControl.LoadCollection(url, string.Empty);
}

Więc co się dzieje tutaj. W zdarzeniu, które zachodzi po wczytaniu aplikacji kod przechwytuje kompletną ścieżkę do pliku .xap. Tak przy okazji plik “.xap” jest źródłem aplikacji Silverlight. Potem ze ścieżki usuwam odniesienie do pliku .xap za pomocą metody Remove(). Teraz mam pełną ścieżkę do katalogu “ClientBin” . W katalogu “ClientBin” posiadam też swoją kolekcję więc wystarczy dopisać do adresu nazwę kolekcji oraz jej rozszerzenie “.cxml”.
Zrobione.

Link do Aplikacji

Ta i tak właśnie działa. Chociaż mam pewną wątpliwość czy ścieżka podawana w metodzie LoadCollection musi być absolutna. Tak czy siak w sieci nic nie znalazłem na ten temat a ścieżka relatywna zwraca wyjątek więc raczej nie.

Oto w pełni działająca aplikacja PivotViewer wraz z kolekcją obrazków gier na Amigę. Teraz gdy aplikacja nie działa w localhost (z dysku) widać, że technologia DeepZoom czyli dzielenie obrazków na mniejsze nie jest taka głupia.

Kolekcja Gier na Amige pokazana w Pivot