Uvod do WPF prikazu(Command) pro naproste zacatecniky

Prikazy jsou ve WPF velmi vyhodne zvlaste v pripade, kdy potrebujete namapovat nejakou klavesovou zkratku pomoci KeyGesture(a k dispozici je i trida MouseGesture dedici taky od InputGesture, takze by slo mozna i nejak udelat gesto mysi, nicmene s timto jsem se jeste nikdy nesetkal, spise bych rekl ze to bude treba klik na leve tlacitko mysi + klaves na klavesnici) nebo pokud potrebujete automaticky povolovat / zakazovat nejake tlacitko nebo cokoliv co lze namapovat na prikaz – staci napsat metodu CanExecute tridy CommandBinding ktera pak se automaticky co cca 500ms vola a povoluje / zakazuje napr. tlacitko.

Takze jak si udelat jednoduchy prikaz?

Prvnim krokem je vytvoreni tridy jakehokoliv nazvu(ja vzdy pouzivam {nazev_programu}Commands. Do ni napiste vytvoreni instanci trid RoutedCommand, ktera si za svuj prvni parametr bere nazev(ktery jsem zatim ale nikdy nepouzil), pak nazev libovolne tridy ktera je ve jmennem prostoru ve kterem budete tento prikaz vyuzivat.

Toto byly 2 povinne parametry ale konstuktoru tridy jsou celkove 3. U me fungoval i konstruktor bez parametru a nebo konstruktor se 2mi zminovanymi parametry + 3. ktery specifikuje zkratky vstupnich zarizeni(klavesnice, mys).

Pak si pridejte jmenny prostor nejlepe do root tagu ve vasem XAML souboru – v mem pripade to je Window a jmenny prostor jsem si nazval src. Myslim ze tento jmenny prostor byste tam uz meli mit, takze si to prvne jen zkontrolujte


Dalsim krokem je vytvorit obalujici element Window.CommandBindings hned za oteviracim tagem Window:

Pak je potreba mit tlacitko ktere budeme automaticky povolovat nebo zakazovat a listbox, do nehoz budeme pocitat protoze budeme pouzivat vlakna:


Protoze budeme pouzivat vlakna, musite si definovat tridu, ktera obsahuje delegata odkazujici na metodu ktera pridava do ListBox objekty:

Nakonec uz jen napisete do code-behind tridy Window metody CanExecute, Executed, OnLoad a take vytvorime globalni promennou Thread, abysme mohli toto vlakno zapinat i kontrolovat zda je zive – vsechno v jine metode:


Vysledek? Tlacitko neslo zmacknout dokud vlakno bezelo

Categories

Leave a Reply

Your email address will not be published. Required fields are marked *