Wizardy w AERO
W viście są dosyć fajnie dopracowane kontrolki – to już wiecie. Moją szczególną uwagę zwróciły wizardy w aero, taki jak na przykład przy dodawaniu nowej drukarki:
To co głównie wyróżnia tego wizarda to przycisk wstecz w lewym górnym rogu i olbrzymi pasek tytułowy ( jak na mój gust nawet za duży).
Szukałem sposobu w jaki by można zrobić takiego wizarda we własnej aplikacji, który byłby zgodny z systemowym. Okazuje się, że istnieje nawet przykład, który pokazuje jak to zrobić w .NET, oczywiście jak zwykle w msdnie sprawa nie jest banalna i wpierw należy pobrać Vista Bridge Controls. Po skompilowaniu wszystkiego możemy zacząć używać fajnych aero wizardów w WPF:
Zrobienie czegoś takiego wymaga dosyć prostego xamla:
<v:AeroWizard x:Class="Wizard.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:v="clr-namespace:Microsoft.SDK.Samples.VistaBridge.Controls;assembly=VistaBridgeControls"
xmlns:l="clr-namespace:Wizard"
MainInstruction="AERO Wizard Test"
Title="Connect to a workplace"
>
<v:AeroWizard.Pages>
<Page>
<StackPanel>
<v:CommandLinkWPF Link="Choice One" Note="(Recommended)" Click="OnClick" />
<v:CommandLinkWPF Link="Choice Two" Note="(Not Recommended)" Click="OnClick" />
<v:CommandLinkWPF Link="Choice Three" Note="(Never Use)" />
</StackPanel>
</Page>
<Page>
<StackPanel>
<v:CommandLinkWPF Link="Some Other Link text" Note="This is a lot of descriptive text, which will enable the user to make a better choice." Click="OnClick" />
</StackPanel>
</Page>
</v:AeroWizard.Pages>
</v:AeroWizard>
Bardzo poważna wadą takiego rozwiązania to że będzie działać jedynie na Viście, na xp pojawi się komunikat o braku biblioteki dwmapi.dll. Żeby rozwiązać problem trzeba by napisać własną abstrakcję wizarda, która na viscie używałaby aero a na xp jakiegoś domyślnego wyglądu.
Bartłomiej Szafko
4 Jan 09 at 21:40
UPDATE okazuje się że wystarczy usunąć odwołania do DWM żeby działało też na xp, tylko wygląd już nie ten