Pochodzę głównie z sieci i trochę z Windows Forms. W nowym projekcie będziemy używać WPF. Aplikacja WPF będzie potrzebowała 10-20 małych ikon i obrazów w celach ilustracyjnych. Myślę o przechowywaniu ich w zestawie jako zasobów osadzonych. Czy to dobra droga?
Jak określić w XAML, że formant obrazu powinien ładować obraz z osadzonego zasobu?
źródło
DynamicResource
rozszerzenia znaczników zamiastStaticResource
, zakładając, że znasz klucze w czasie kompilacji. W WPF możesz tworzyć słowniki zasobów w czasie wykonywania. W rzeczywistości dzieje się tak, gdy ładujesz dokument Xaml, po prostu nie widzisz równoważnego C #.Width="{Binding Source.PixelWidth, RelativeSource={RelativeSource Self}}"
do tegoImage
, ponieważ w przeciwnym razie często widzę, że obraz z jakiegoś powodu jest groteskowo powiększany (na przykład ikony 16 x 16 rozciągnięte do czegoś, co wygląda jak 200 x 200 pikseli).Stwierdziłem, że najlepszą praktyką korzystania z obrazów, filmów itp. Jest:
Przykład
Korzyści:
źródło
Niektóre osoby pytają o zrobienie tego w kodzie i nie uzyskanie odpowiedzi.
Po wielu godzinach poszukiwań znalazłem bardzo prostą metodę, nie znalazłem żadnego przykładu, dlatego dzielę się tutaj moim, który działa z obrazami. (mój był .gif)
Podsumowanie:
Zwraca BitmapFrame, które wydają się lubić „miejsca docelowe” ImageSource.
Posługiwać się:
Metoda:
Wnioski:
Z moich doświadczeń wynika, że łańcuch paczki nie jest problemem, sprawdź swoje strumienie, a zwłaszcza jeśli czytając go po raz pierwszy ustawiłeś wskaźnik na końcu pliku i musisz ponownie ustawić go na zero przed ponownym odczytaniem.
Mam nadzieję, że dzięki temu zaoszczędzisz tyle godzin, ile chciałbym, aby ten kawałek miał dla mnie!
źródło
W kodzie, aby załadować zasób do wykonującego zestawu, w którym mój obraz
Freq.png
był w folderzeIcons
i zdefiniowany jakoResource
:Wykonałem również funkcję:
Użycie (założenie, że umieściłeś funkcję w klasie ResourceHelper):
Uwaga : patrz identyfikatory URI MSDN Pack w WPF :
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
źródło
new Uri(@"pack://application:,,,/" + pathInApplication)
również załatwiło sprawę .Tak, to właściwa droga.
Możesz użyć obrazu w pliku zasobów, używając tylko ścieżki:
Musisz ustawić akcję kompilacji pliku obrazu na „Zasób”.
źródło
Pełny opis sposobu korzystania z zasobów: zasoby aplikacji WPF, zawartość i pliki danych
I jak się do nich odwoływać, przeczytaj „Pakowanie identyfikatorów URI w WPF”.
Krótko mówiąc, istnieją nawet środki do odwoływania się do zasobów z referencyjnych / referencyjnych zestawów.
źródło
To działało dla mnie:
źródło
Jeśli używasz Blend , aby było to wyjątkowo łatwe i nie miał problemów z uzyskaniem poprawnej ścieżki dla atrybutu Source , po prostu przeciągnij i upuść obraz z panelu Projekt na projektanta.
źródło
Tak, to właściwa droga. Możesz użyć obrazów w pliku zasobów, używając ścieżki:
źródło
Poniższe działało, a obrazy do ustawienia są zasobami we właściwościach:
źródło