- User controls - kontrolki zbudowane przez użytkownika, dziedziczą po klasie UserControl. Jest to kontrolka stworzona z kilku innych kontrolek
- Custom controls - kontrolki stworzone od zera. Dziedziczą po klasie Control lub ContentControl.
- User controls - tworzymy za pomocą graficznego interfejsu, przeciągając inne kontrolki z zasobnika do okna nowej kontrolki
- Custom controls - tworzone są od zera w kodzie bez pomocy wizualnego interfejsu
- jeżeli efekt który chcemy uzyskać jest możliwy przy pomocy jednej z istniejących kontrolek, aczkolwiek jej wygląd nam nie odpowiada - stosujemy szablony
- jeżeli żądany efekt można uzyskać w wyniku połączenia kilku istniejących kontrolek - budujemy user control
- jeżeli ani wygląd, ani połączenie kilku kontrolek w jedną nie mogą nam pomóc w uzyskaniu pożądanego efektu - tworzymy custom control
Właściwości typu Dependency
Dependency Properties to rodzaj standardowych właściwości dla WPF. Umożliwiają notyfikację zmian, animację, dziedziczenie wartości oraz bindowanie. Właściwości te można tworzyć w klasach które dziedziczą po klasie DependencyObject. Dependency Propeteries to zwykłe właściwości znane z C# wzbogacone o elementy dodane na potrzeby WPF-a.
Przykład implementacji DP:
Code:
Bindowanie do takiej właściwości w XAML:
Code:
Wygląd na podstawie systemowego schematu kolorów
Począwszy od Windows Visty możliwe jest ustawienie tematu wizualnego. Aplikacje, które integrują się z systemowym tematem, także zmieniają wygląd kontrolek oraz zachowanie.
Aby można było integrować się z systemowym tematem graficznym, należy korzystać z klas z przedrostkiem System np. SystemColors, SystemFonts, SystemParameters.
Klasy te zawierają zdefiniowane kolory, pędzle i ustawienia wykorzystywane w ustawionym temacie systemu operacyjnego. Dodatkowo, gdy użytkownik zmieni temat graficzny, zostaną uaktualnione:
Code:
Używamy dynamicznych zasobów, gdyż po zmianie tematu przez użytkownika chcemy od razu zobaczyć także zmianę w naszym programie.
Jeżeli mimo wszystko chcemy aby nasze wyglądały indywidualnie niezależnie od zastosowanego tematu graficznego lub też chcemy zmienić wygląd niektórych kontrolek, możemy sami zdefiniować definicje szablonów w zależności od tematu graficznego systemu. Głównym plikiem definiującym wygląd kontrolek jest plik Generic.xaml. Definiuje on wygląd kontrolek w przypadku gdy nie ma zdefiniowanego ich wyglądu dla konkretnego tematu. Pozostałe pliki szablonów definiujemy wg. wzoru:
<ThemeName>.<ThemeColor>
Wybrane tematy i definicje plików xaml:
Windows Vista - Aero.NormalColor.xaml
Default Windows XP - Luna.NormalColor.xaml
Silver Windows XP - Luna.Metalic.xaml
Windows Classic - Classic.xaml
Niezależnie od tego który temat graficzny zamierzamy zdefiniować musimy i tak stworzyć generyczną wersję (Generic.xaml) na wypadek błędu podczas nakładania stylów zawartych w specyficznym temacie.
Oprócz stworzenia pliku z szablonami kontrolek, należy dodać atrybut ThemeInfo do pliku AssemblyInfo.cs. Atrybut ten przyjmuje dwa atrybuty - pierwszy informuje o miejscu gdzie są przechowywane pliki z szablonami i zasobami dla tematów graficznych, drugi informuje gdzie znajduje się generyczna wersja szablonu.
Możliwe wartości tych parametrów:
- ResourceDictionaryLocation.None - pliki z specyficznym wyglądem dla tematów nie będą szukane
- ResourceDictionaryLocation.SourceAssembly: - pliki będą szukane w aktualnym pliku programu
- ResourceDictionaryLocation.ExternalAssembly - zostaną przeszukane zewnętrzne biblioteki dll. Ich nazwa musi być zgodna ze wzorem: <AssemblyName>.<ThemeName>.dll gdzie <AssemblyName> - nazwa aktualnego pliku dll, <ThemeName> - nazwa tematu graficznego.
Brak komentarzy:
Prześlij komentarz