piątek, 23 lipca 2010

WPF praktyczne porady

Kilka rzeczy, które ostatnim czasem wykorzystywałem (aby zapamiętać, no i może komuś też się przydadzą):

1. Dodawanie czcionki do aplikacji.
Tworząc aplikację często jest potrzeba wykorzystania niestandardowej czcionki. Aby jednak użytkownik mógł zobaczyć napisy musimy ją dodać do naszej aplikacji. Rozwiązania są dwa. Pierwsze to zainstalowanie jej w systemie wraz z aplikacją. Drugie, które tu pokaże to wkompilowanie czcionki w exe aplikacji. Na początek dodajemy czcionkę do zasobów naszej aplikacji:


Następnie w właściwości FontFamily wprowadzamy nazwę czcionki poprzedzoną znakiem #, ale nie nazwę pliku:


<TextBlock Text="Ala ma kota" FontFamily="./Fonts\#ChopinScript" 
FontSize="60" />
Efekt:

Oczywiście plik z czcionką znajdzie się w exe bez potrzeby instalowania go osobno w systemie.

2. Mnemonic Labela
Dziwna nazwa, ale całkiem fajny mechanizm. Wyobraźmy sobie formę z wieloma polami ( w przykładzie zawarłem tylko 2). Może to być jakiś formularz danych osobowych. Sporo wprowadzania danych...
Niekiedy chcemy przeskoczyć i wypełnić pola w innej kolejności niż są na formatce. Stosując klawisz Tab przeskakujemy do następnej kontrolki. Jednak label może posłużyć jako odnośnik do kontrolki której jest przypisany. Zobaczmy na scren:

Teraz chcemy aby np. po kliknięciu Alt + I TextBox odpowiedzialny za imię stał się aktywny a w wypadku kombinacji Alt + N inny itd. W kodzie będzie wyglądać to następująco:
        <StackPanel Orientation="Vertical">
            <Label Content="_Imię:" Target="{Binding ElementName=firstName}" />
            <TextBox HorizontalAlignment="Left" Name="firstName" Width="100"/>
            <Label Content="_Nazwisko:" Target="{Binding ElementName=lastName}" />
            <TextBox HorizontalAlignment="Left" Name="lastName" Width="100"/>
        </StackPanel> 

Tak więc znak _ oznacza która litera jest brana do skrótu (odpowiednik znaku & w WindowsForms) a właściwość Target wskazuje która kontrolka zostanie aktywowana. Dodatkowo po naciśnięciu Alt zostaną podświetlone odpowiednie skróty:



3. Dostęp do okna głównego aplikacji
Czynność bardzo prosta korzystając z klasy Application:
Window mainWindow = Application.Current.MainWindow;

Można także zdobyć referencję do wszystkich aktualnie wyświetlanych okien:
            WindowCollection windowsOpen = Application.Current.Windows;
            foreach (Window item in windowsOpen)
            {
                MessageBox.Show(item.Title);
            }

Oczywiście do problemu wszystkich aktualnie otwartych okien można podejść także inaczej, tworząc własną listę otwartych okien i odpowiednio nią zarządzając.

4. Dostęp do zasobów z innej biblioteki dll
W bardzo prosty sposób możemy dostać się do zasobów innej biblioteki dll. Jeżeli dla przykładu w bibliotece Zdiecia.dll znajduje się zasób w postaci folderu Zdiecie a w nim plik fotka.png. Dostać się możemy do niej w następujący sposób:

            Image image = new Image();

            image.Source = new BitmapImage(new Uri("Zdiecia;zdiecie/fotka.png", UriKind.Relative));

Brak komentarzy:

Prześlij komentarz