Kategoria: WPF

PreCode Wyświetlanie kodu na bloga. Tak mam na ten temat wiele wpisów. Miesiąc temu postanowiłem stworzyć narzędzie w WPF, które pomoże mi jeszcze bardziej przyspieszyć proces dodawania kodu do wpisów oraz do slajdów na webinary.

Taka aplikacja już istniała i nazywała się "PreCoder". Domyślnie był to plugin do Windows Live Writer. Tak kiedyś tak pisałem wpisy, a teraz to nawet Windows Live Writer nie będzie chciał Ci się zainstalować, ponieważ Microsoft zablokował ci taką możliwość. Odpowiedni Open Source tego programu z tego, co wiem to nie ma takiego pluginu. Jego ostatnia aktualizacja była w roku 2017. 

Sam "PreCoder" można uruchomić jako normalną aplikację WPF. Niestety nie spełniała ona wszystkim moich potrzeb więc potrzebowałem czegoś podobnego, ale rozbudowanego. Będę jednak szczery, że ułatwiłem sobie zdanie i logikę formatowania kodu częściowo skopiowałem właśnie z tego programu. 

W tym wpisie pokaże ci jak utworzyć szybko pomocniczą aplikację w WPF która :

  • Usunie białe znaki 
  • Wyrówna odstępy w kodzie
  • Zrobi kodowanie HTML (HTML Encode) na tekscie
  • Tekst automatycznie zostanie skopiowany do schowka
  • Otoczy tekst tagami <pre> i <code> jeśli będziemy tego chcieli
  • Doda odpowiednie paragrafy <p> do tekstu, jeśli będziemy tego chcieli
  • Otworzy rezultat naszego działania w notatniku, jeśli będziemy tego chcieli
  • Doda odpowiednią klasę CSS zależności od typu kodu. Jest to ważne dla biblioteki JavaScript Highlight.js, która koloryzuje składnie na tym blogu
  • Doda atrybut, który określi tytuł kodu. Coś co kiedyś stworzyłem na swoim blogu, ale dawno z tego nie korzystałem, ponieważ nie chciało mi się dodawać atrybutu data-codetitle ręcznie.

Aplikacja ma działać tak.

Publish W .NET 5, który jest następną wersją .NET CORE, a nie tego .NET, który działa tylko na Windows. W .NET 5 można utworzyć aplikację WPF i Win Forms tylko działają one nadal tylko na systemy Windows.

Jak na razie .NET nie ma dobrej odpowiedzi na tworzenie aplikacji desktopowych wszędzie. Być może za rok MAUI rozwiąże ten problem.

Na razie WPF i Windows Forms nadal żyją, mimo iż kwestionować te framework można było z tych samym powód w 2010 roku. Mając rok 2021, aż strach pomyśleć, że nic nie zmieniło się w tej kwestii od 11 lat.

Aplikację WPF i Windows Form nadal są używane w firmach. Dodatkowo ktoś na webinarze zwrócił mi uwagę, że istnieje gra na Steamie, która została napisana w WPF.

Ja miesiąc temu napisałem prostą aplikację WPF do formatowania kodu, która bardzo skraca mi czas pracy do tworzenia slajdów bądź wpisów na blogu. 

Powstało jednak jedno dobre pytanie. Jak taką aplikację publikować jako przenośny plik ".exe", który zadziała na każdym systemie Windows bezwzględu na to, czy .NET 5 jest zainstalowany, czy nie.

ICommandCzęść.2 W poprzednim wpisie stworzyliśmy prostą aplikację WPF, która implementuje Inversion of Control przy pomocy kontenera Castle.Windosor.

Przykład był prosty, ponieważ na końcu powiązaliśmy tylko odpowiednie właściwości do odpowiednich etykiet.

 

Czas jednak zabrać ten przykład na wyższy poziom, gdyż napiszemy kod, który powiąże metody z odpowiednimi przyciskami,

Aby to zrobić będę musiał mieć klasy implementujące interfejs ICommand. Jak to jednak zrobić w miarę dobrze?

Na początku też zaznaczę, że postanowiłem zignorować fakt, że techniki związane z ICommand posiadają pewien specyficzny styl przesyłania parametrów, jak i rezultatu działania metod.

ThreadingCzęść NR.5 Jak można wykorzystać programowanie aspektowe w pożyteczny sposób?

Interceptory mogą się przydać przy tworzeniu nowych wątków. Pisząc aplikację w WPF lub Windows Forms łatwo zauważyć tę sytuację. Podczas wykonywania jakiejś długiej czynności w kodzie możesz zauważyć, że cały wątek UI został zatrzymany. Oznacza to, że nie możesz ruszyć okna, nie możesz skrolować okna i nie możesz na nic klikać, bo cały wątek odpowiedzialny za to jest zajęty.

IOCCzęść.1 Analizując ruch na swoim blogu postanowiłem zrobić wpis na temat wstrzykiwania zależności i kontenerów IOC, czyli kontenerów Inversion of Control. Dzisiaj skoncentruję się na kontenerze Castle.Windsor, chociaż w przyszłości planuję także użyć Ninject.

Co zrobię w tym wpisie? Zainstaluję Castle.Windsor z NuGet i przygotuję aplikację WPF do nowej architektury.

ScriptCS

Pojawienie się kompilatora Roslyn otworzyło wiele nowych ścieżek.

Jedną z tych ścieżek jest biblioteka ScriptCS.

Dzięki niej jest możliwe używanie C# jako języka skryptowego w konsoli. Dzięki niemu edytory takie jak Notepad++ mogą kompilować kod napisany w C#.

Co najważniejsze można użyć tej biblioteki do własnych celów.

Dependency

Kiedyś, dawno temu ktoś mnie poprosił o stworzenie pomocnego wpisu do MVVM Light-a. Kiedyś już miałem styczność z tym frameworkiem i jego odpowiednikami.

Obecnie jednak moja praca krąży tak intensywnie wokół ASP.NET, że nie byłbym w stanie stworzyć takiego wpisu.

Pomyślałem sobie jednak, że mimo, iż Silverlight jest martwą technologią i wszystko teraz będzie iść w mobile/Web, to dla swojej frajdy zrobię kurs MVVM. Silverlight i WPF budzą we mnie pewne pozytywne wspomnienia.

MVVM Light to prosty framework, który pomaga programiście użyć wzorca MVVM. Jak ten wzorzec działa? – po co on jest ? To już inna historia. Zacznijmy od podstawy podstaw.

Zanim padnie słowo MVVM trzeba dobrze omówić mechanizm DataBinding. A przed nim obiekty DependencyProperty i Dependency Object.

DelegataWiele kontrolek w WPF,Windows Forms i Silverlight ma właściwość “Tag”. W niej możemy przechowywać dowolny obiekt powiązany z daną kontrolką.

W tym wpisie pokaże jak użyć delegat wraz z właściwością Tag. Każda kontrolka z właściwością tag może użyć tej techniki. Dla uproszczenia wpisu ja skorzystałem z kontrolki Button.

Delegata

Co to jest delegata? Dobre pytanie na rozmowę kwalifikacyjną.

Delegata jest wskaźnikiem do danej metody bądź metod. Delegata przetrzymuje więc referencję do danej funkcji.

Istnieje jeden wymóg.

Markup ExtCzęść NR.4Po długiej przerwie zastanawiam się czy uzupełniać ten kurs dalej, zwłaszcza że ma on swoje wady, ale co tam.

W poprzednim wpisie omówiłem właściwości elementów z punktu widzenia języka XAML.

Czyli w wielkim skrócie możemy ustawić właściwości elementów na dwa sposoby.

WłaściwościCzęść NR.3 Windows Forms nie oferuje takiej bogatej kompozycji jak WPF. Nie mówi tutaj o różnicy pomiędzy grafiką rastrową ,a grafiką wektorową. Przykładowo w Windows Form do przycisku możemy umieścić tylko tekst.

Natomiast do zawartości przycisku w WPF możemy umieścić każdy element. Musi on tylko dziedziczyć po odpowiednich klasach.

WPF AsyncAsync i Await to całkiem nowy fantastyczny bajer, który został dodany do języka C# całkiem nie dawno. Można go używać w każdej aplikacji .NET-owej, chociaż  małe różnice w wykorzystaniu istnieją to sumie filozofia działania jest ta sama .

Ciężko jest wyjaśnić co dokładnie dzieje się pod spodem aplikacji,  która korzysta z tej funkcjonalności.

Why XAMLCzęść NR.1 XAML jest dialektem XML i stał się on ważną częścią platformy .NET od czasu jego pierwszej prezentacji w 2006 roku w trakcie premiery WPF. Często jest mylony jako metoda określająca interfejs użytkownika zupełnie tak jak HTML. Pod koniec tego kursu zrozumiesz jednak ,że XAML to coś dużo więcej niż aranżowanie kontrolek na ekranie komputera.

WPFKolejny wpis, który powstał ze słowa kluczowego wpisanego do wyszukiwarki Google przez pewnego studenta. Oj biedni studenci, jacy to oni trudne programy mają do napisania xD.

W sumie ja na początków studiów w Białej Podlaskiej też nie byłem takim weteranem.

Twitter

W poprzednim wpisie opisałem jak w WinRt możemy się zalogować do Facebook i wysłać wiadomości. Sieci społecznościowe są dzisiaj w modzie dlatego pomyślałem sobie dlaczego nie zrobić podobnej aplikacji testowej dla Twitter-a.

WinRT

Na co dzień miliony osób korzysta z Facebook. Facebook też jest ważnym aspektem, jeśli chodzi o marketing samej aplikacji.

Nic więc dziwnego, że aplikacje dają możliwość pochwalenia się swoimi wyczynami na facebook-u.

MessageTak jak większość programistów pierwszy test nowej technologii zaczyna się od dobrego napisu “Hello World”, tego samego szukałem w WinRT.

WinRT przemodelowało wszystko i znajome przestrzenie nazw, jak i klasy mogą już nie istnieć w WinRT.

Pisząc pierwszą aplikację w WinRT chciałem tylko wywołać prosty MessageBox z napisem “Hello World” , jak się jednak okazało klasa ta nie istnieje w WinRT.

Losowość W niektórych przypadkach klasa Random nie wystarcza do generowania losowych liczb. Problematyka generowania losowych wartości polega na tym ,że są one generowane według określonego wzoru.

Co oznacza , że tak naprawdę są one liczbami pseudolosowymi. Jeśli ten wzór nie jest dobry wtedy nasza”losowość” nie jest aż taka bardzo „losowa”.

Taka losowość jest w porządku jednak w większości przypadków wciąż nie można jej porównać do rzutu kostką, czy monetą.

Markup Znaczniki rozszerzeniowe! Bardzo ważny aspekt w XAML-u. Znaczniki są krótkimi napisami zazwyczaj zamkniętymi w nawiasach klamrowych, które dodają nową funkcjonalność w XAML-u. W języku XAML stosujemy różne znaczniki takie jak “{StaticResource}”, “{TemplateBinding}”, i “{Binding}” oraz wiele innych. Używam ich przez cały czas. 

Ale co z tego skoro ktoś wymyślił składnie do uzupełniania atrybutów XAML w taki prosty sposób bez użycia kodu pobocznego (code-behind). Ten fakt we własnej osobie jest interesujący. Jednak co jest jeszcze bardziej interesujące, to fakt , że możemy stworzyć swoje znaczniki. Żadnego kodu pobocznego Uśmiech

Tworzenie własnych znaczników jest popularne w różnych wzorcach jak MVVM. Obecnie WPF oraz Silverlight 5 pozwala na stworzenie własnego znacznika. Chociaż w Silverlight 5 beta robi się to zupełnie inaczej niż w WPF. Aplikacja, którą napisałem w WPF nie może być tak po prostu przeniesiona za pomocą “copy/paste” do Silverlight.

Wszystkie Kategorie