Pomoc w WPF

Jak już się napisze aplikację, to czasem trzeba pomóc użytkownikowi odnaleźć się w gąszczu guzików, opcji, ustawień i innych zmiennych. Czas zagubiona dusza naciśnie F1 w nadziei na uzyskanie odrobiny więcej informacji na temat magicznego pola DevCtrlNo które przyjmuję tylko cyfry. Na przykład co ma tam wpisać i czy nie zepsuje się po wpisaniu złych wartości. Żeby tego dokonać, trzeba zaimplementować jakąś pomóc dla usera, np. poprzez F1. Można to zrobić także na inne sposoby, tooltip, dołączyć, html, czy inaczej. Ja góglując znalazłem taki jeden, który mi odpowiada i chce się tym sposobem podzielić.

Przykładowy kod jak zwykle na xp-dev. Tak jak poprzednio nie jest to mój wkład w wiedzę dotyczącą WPF, a jedynie opracowanie posta. Oryginalny wpis znaleźć można tutaj, a dodatkowe fikuśne bajery tutaj. Drugi link zawiera ciekawe artykuły dotyczące WPF – polecam przejrzenie.

Co trzeba zrobić by pięknie obsługiwać helpa?
– Nowy projekt
– Prze(pisz|kopiuj) klasę HelpProvider
– Dodaj brakujące namespace w xaml okna
– Rozszerz kontrolki o helpa
– Przejrzyj kod klasy, aby wyklikać ciekawsze efekty helpa niż tylko messagebox.

Oczywiście taki kod wspiera różne wersje językowe, ale o tym już pisałem wcześniej.

To tyle. Dla mnie taki help jest na wypasie, a dla was?

WPF w wielu językach

Jeżeli będziecie kiedyś w potrzebie zaimplementowania obsługi kilku języków w aplikacji opartej na WPF, to możecie skorzystać z tego wpisu. Nie jest to moje rozwiązanie, a raczej opracowanie artykułu znalezionego na codeproject. Jeżeli coś nie będzie działa, nie będzie jasne, czy w ogóle nie będzie to pytania kierujcie do mnie lub bezpośrednio do autora artykułu na codeproject. To co tutaj zamierzam umieścić, to tylko kilka kroków, które podsumowują całą pracę potrzebną do implementacji interesującej nas funkcjonalności. To tyle tytułem wyjaśnienia i wprowadzenia.
Nazwy klas odpowiadają tym, które zostały użyte w kodzie dostępnym pod tym adresem. Kod w przykładzie z codeproject używa innych nazw.

Kroki potrzebne do zaimplementowania funkcjonalności:
1) Utwórz projekt
2) Utwórz katalog w projekcie. W katalogu będziesz trzymać zasoby. Oraz implementacje klasy, zwracającej instancje zasobów, oraz obsługującej zmianę aktualnego języka
3) Dodaj zasoby do projektu
3a) Ustaw custom namespace na wpfMUI.Properties (wpfMUI to nazwa mojego projektu)
3b) Usuń domyślne zasoby z Properties
4) Utwórz klasę LocalResources
4a) Prze(pisz|kopiuj) kod klasy
5) Dodaj do projektu ResourceDictionary
5a)Prze(pisz|kopiuj) kod
6) W app.xaml dodaj ResourceDictionary do zasobów aplikacji, prze(pisz|kopiuj)
7) W Properties.Settings ustaw domyślną wartość dla CultureInfo, w przykładnie “en” jest domyślny
8) W inicjalizacji głównego okna skorzystaj z tej wartości, przeczytaj komentarz w projekcie.
9) Podepnij obsługę comboboxa, pamiętaj to tylko przykład. W normalnym projekcie, kto inny będzie informować klasę LocalResources o zmianach.
10) W zasobach ustaw dostęp na publiczny
10a) Stwórz kopie zasobów, zmień nazwę na Resources.en.resx
10b) Zrób kopie i zmień nazwę na Resources.pl.resx
10c) Ustaw odpowiednie wartości dla poszczególnych wersji językowych
11) Ustaw właściwy content dla kontrolek, np dla guzika:

Content="{Binding Path=buttonText, Source={StaticResource Resources}}"

Dla combobox:

ItemsSource="{Binding Mode=OneTime, Path=SupportedCultures,Source={StaticResource SuppCultures}}

Możesz też użyć ustawiania właściwości dla kontrolek, ale zauważyłem że Path i tak należy ustawić ręcznie.

Po tym wszystkim, możesz próbować kompilować projekt i odpalać. Potem tylko drobne poprawki i wszystko powinno działać. Projekt jak często można pobrać z xp-dev

Cieszysz się?

Time Counter

Się porobiło. Napisałem prosty programik, który pozwoli na sprawdzenie na co marnuje czas siedząc przed komputerem. Aplikacja prosta i pełna błędów.
Jeżeli kogoś zainteresuje to źródła są tam xp-dev, a binarka tam TimeCounter.7z.Działanie jest nie skomplikowane, aplikacja co zadany czas sprawdza jaka jest nazwa aktywnego okna, lub jaka jest nazwa procesu którego okno ma aktualnie focus i dodaje do licznika. Ot i tyle. Wymaga .net 3.5 wybaczcie mi za to, ale uczę się c# i dlatego w tym klikam.

Pytania? Drwiny? Sugestie?

//edit
W ramach aktywności blogowej dodałem brakujący tytuł.

projekt p2prss

Ostatnie dni skupiałem się tylko na czytaniu o androidzie, aby utrzymać równowagę w nauce, teraz trochę c# a w związku z czym powróciłem do projektu “p2prss”(o gps2kml nie zapomniałem, muszę trochę doczytać). Zalegało mi kilka rzeczy na liście todo za które miałem się zabrać. Na dodatek po włączeniu aplikacji od razu dodałem buga do listy rzeczy do zrobienia.

Aplikacja nie jest skomplikowana, zacząłem ją pisać, gdy uczyłem się podstaw programowania w c# i .net, więc nie jest to cud techniki. Spełnia swoje założenia także jest dobrze
 

Do czego służy i jak to się obsługuje:
To proste, należy dodać serwer, który udostępnia kanał rss z nowymi torrentami. Następnie zdefiniować obiekt pożądań i określić jakie kluczowe słowa powinny wystąpić, można zdefiniować słowa, których nie powinno być w interesującym nas torrencie. GUI jest przygotowane, na trochę większą ilość szczegółów, ale nie wiem czy będę z tego korzystać. Po przebrnięciu przez ten niezwykle skomplikowany proces, aplikacja będzie cyklicznie pobierać listę nowych torrentów. Jeżeli zostanie znaleziony taki, który będzie pasować do opisanego, wyświetli odpowiedni komunikat i umożliwi pobranie pliku .torrent. Ważne: p2prss nie obsługuje protokołu torrent, aby móc ściągać z materiały należy skorzystać z odpowiedniego programu, p2prss monitoruje tylko czy pojawił się oczekiwany torrent. Dodatkowo jeżeli użytkownik się nudzić, może przejrzeć aktualną listę świeżych torrentów i ściągnąć dowolny element z listy.
Plus kilka prostych ustawień i wybór wersji językowej.
 
Źródła projektu są tutaj
A tu można zostawić komentarz lub zaraportować problem.
Można też wysłać mi maila lub zostawić ślad po sobie w komentarzu.
Od razy mała informacja o legalności:
Pomijam fakt piractwa, każdy używa tego jak chce i na własną odpowiedzialność. Jako przykładowy serwer użyłem mininova.org, która udostępnia tylko darmowe rzeczy. A przedmiotem zainteresowań jest openSuse, więc nie powinno być problemów.
Pytania, uwagi, kpiny?