Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Maros2470
Člen
Avatar
Maros2470:21.2.2015 13:06

Zdravím. Potřeboval bych poradit jak napsat klávesovou zkratku pro kontrolku. Já jsem to zkoušel pro tlačítko, ale nechce mi to fungovat. Zatím to mám napsáno takto:

private void btnProdej_KeyDown(object sender, KeyEventArgs e)
       {
           if (e.Key == Key.P)
           {
               var prodejWindow = new ProdejWindow();
               prodejWindow.Show();
               this.Close();
           }
       }

Můžete mi poradit? Díky

 
Odpovědět
21.2.2015 13:06
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá na Maros2470
martinsakra:21.2.2015 13:28

Klávesové zkratky jdou například pro celé okono jestli potřebuješ, mám pocit že ve wpf jdou velmi snadno kombinca crt+... alt+... já to použil http://www.itnetwork.cz/…ator-mozaika máš tam i zdrojové kody a ctrl+N, ctrl+S funugjí vcelku pěkně

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.2.2015 13:28
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Maros2470
Člen
Avatar
Odpovídá na martinsakra
Maros2470:21.2.2015 14:17

Pod jakou událost tlačítka bys to napsal? Já to mám po úpravě takto:

private void btnProdej_KeyDown(object sender, KeyEventArgs e)
       {
           if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.P))
           {
               var prodejWindow = new ProdejWindow();
               prodejWindow.Show();
               this.Close();
           }
       }
Editováno 21.2.2015 14:18
 
Nahoru Odpovědět
21.2.2015 14:17
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá na Maros2470
martinsakra:21.2.2015 14:23

v XAML si definuješ zkratku co ji vykoná: Executed (pojmenuješ si tak event)

<Window.CommandBindings>
       <CommandBinding Command="Close" Executed="MyCommandClose"/>
       <CommandBinding Command="Save" Executed="MyCommandSave"/>
       <CommandBinding Command="New" Executed="MyCommandNew"/>
       <CommandBinding Command="Help" Executed="MyCommandHelp"/>
   </Window.CommandBindings>
   <Window.InputBindings>
       <KeyBinding Command="Close" Key="Q" Modifiers="Control"/>
       <KeyBinding Command="Save" Key="S" Modifiers="Control"/>
       <KeyBinding Command="New" Key="N" Modifiers="Control"/>
       <KeyBinding Command="Help" Key="F1" />
   </Window.InputBindings>

a pak v kodu pojemnovaný event

private void MyCommandClose( object sender, ExecutedRoutedEventArgs e )
    {
        e.Handled = true;
        this.Close();
    }
Nahoru Odpovědět
21.2.2015 14:23
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Maros2470
Člen
Avatar
Odpovídá na martinsakra
Maros2470:21.2.2015 15:00

Jak, ale přiřadit jednotlivé zkratky k různým tlačítkům, nebo MenuItem v jednom okně? Mám asi sedm tlačítek z nichž každé otevírá jiné okno. To co jsi mi napsal se vztahuje k oknu jako takovému. To mi sice pomohlo, ale nevím jak s těmi tlačítky případně s MenuItem. A dále, jestli tě moc neotravuji, jak nastavit místo Ctrl např. Alt. Díky moc za radu.

 
Nahoru Odpovědět
21.2.2015 15:00
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá na Maros2470
martinsakra:21.2.2015 15:08

Menu item

<MenuItem Name="MenuItemFile"  Height="24" Width="44" Header="File">
               <MenuItem Name="MenuItemNew" Header="New" Command="New" />
               <MenuItem Name="MenuItemSave" Header="Save" Command="Save"  />
               <MenuItem Name="MenuItemQuit" Header="Quit" Command="Close"/>
           </MenuItem>

kliknutí na daný menuitem vyvolá danou událost oproti klasické události je to jenorzdíl

<MenuItem Name="MenuItemCreateSquare" Header="CreateSquare" Click="MenuItemCreateSquare_Click"/>
Nahoru Odpovědět
21.2.2015 15:08
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Maros2470
Člen
Avatar
Odpovídá na martinsakra
Maros2470:21.2.2015 15:15

Díky. A lze to udělat i tak, že ve Window.Comman­dBindings budu mít více položek např. Open? Jde o to, aby např. Ctrl+O otevřelo jedno okno a Ctrl+P jiné okno atd.

 
Nahoru Odpovědět
21.2.2015 15:15
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá na Maros2470
martinsakra:21.2.2015 15:21

v tom případě bych je asi jinak pojmenovaljako OpenHelp a OpenWindow , nebo potom oboje do jedné metody a v té podle nějakých parametrů potom otevřít co potřebuješ + jestli je to všechno označ příspěvek že ti odpovědel at je vidět i pro ostatní :D

Nahoru Odpovědět
21.2.2015 15:21
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Maros2470
Člen
Avatar
Maros2470:21.2.2015 15:27

Díky

 
Nahoru Odpovědět
21.2.2015 15:27
Avatar
Maros2470
Člen
Avatar
Odpovídá na martinsakra
Maros2470:21.2.2015 16:14

Našel jsem toto řešení:

<Window.Resources>
        <RoutedUICommand x:Key="OpenProdej" Text="Otevři Prodej" />
        <RoutedUICommand x:Key="OpenZrcadlo" Text="Otevři Zrcadlo" />
    </Window.Resources>

    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource OpenProdej}" Executed="OpenProdej" />
        <CommandBinding Command="{StaticResource OpenZrcadlo}" Executed="OpenZrcadlo" />
    </Window.CommandBindings>

    <Window.InputBindings>
        <KeyBinding Key="P" Modifiers="Alt" Command="{StaticResource OpenProdej}" />
        <KeyBinding Key="Z" Modifiers="Alt" Command="{StaticResource OpenZrcadlo}" />
    </Window.InputBindings>
private void OpenProdej(object sender, ExecutedRoutedEventArgs e)
        {

            var prodejWindow = new ProdejWindow();
            prodejWindow.Show();
            this.Close();
        }

        private void OpenZrcadlo(object sender, ExecutedRoutedEventArgs e)
        {
            var zrcadloWindow = new ZrcadloWindow();
            zrcadloWindow.Show();
            this.Close();
        }

Chodí to tak, jak jsem potřeboval.

Editováno 21.2.2015 16:15
 
Nahoru Odpovědět
21.2.2015 16:14
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:21.2.2015 16:20

RoutedUICommand nepoužívej. Implementuj si ICommand sám. Tohle slouží trošku k nečemu jinému.

 
Nahoru Odpovědět
21.2.2015 16:20
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:21.2.2015 17:23

Ještě v tom hodně plavu. Jak bys to napsal ty?

 
Nahoru Odpovědět
21.2.2015 17:23
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:21.2.2015 18:46

Vzhledem k tomu, že očividně nepoužíváš MVVM architekturu, tak to tak asi nech. Jde jen o to, že RoutedUICommand je náročnější, protože projede celý visual tree.

Abych byl upřímný, tak jsem routed commandy zatím nepotřeboval.

 
Nahoru Odpovědět
21.2.2015 18:46
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:21.2.2015 18:49

Prosím, mám ještě jeden dotaz. Jak zapsat do klávesové zkratky desetinnou čárku z NumLock? Běžná čárka na klávesnici je Key="OemComma", ale u NumLock nevím. Díky

 
Nahoru Odpovědět
21.2.2015 18:49
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:21.2.2015 18:52

Ten RoutedUIComand jsem vyřešil pomocí RoutedComand a použil jsem to v App.xaml v Application.Re­sources pro celou aplikaci. A chodí to normálně, možná trochu rychleji.

 
Nahoru Odpovědět
21.2.2015 18:52
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:21.2.2015 18:56
Keys.Decimal
 
Nahoru Odpovědět
21.2.2015 18:56
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:21.2.2015 18:59

To je celkem jedno jestli je tam to UI nebo ne. UI ti k tomu přidává akorát jednu vlastnost a to Text, jinak se to chová stejně.

 
Nahoru Odpovědět
21.2.2015 18:59
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:21.2.2015 19:00

Díky moc.

 
Nahoru Odpovědět
21.2.2015 19:00
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:21.2.2015 19:50

Můžeš mi poslat nějaký odkaz na nějaký tutorial o MVVM architektuře? Díky

 
Nahoru Odpovědět
21.2.2015 19:50
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:21.2.2015 20:00

Těch informací o MVVM je hodně, stačí googlit. Jen kdyžtak pošli jakým způsobem implementuješ jednotlivé věci, protože 50% implementací např. ICommandu je špatně. Já nedávno napsal pěknou knihovnu, když tak ti jí tady upnu :)

 
Nahoru Odpovědět
21.2.2015 20:00
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:22.2.2015 8:39

S WPF teprve začínám, předtím jsem dělal jen WF. Pokud mi můžeš poskytnout tu knihovnu, určitě by mi pomohla. Na googlu hledám, ale má angličtina je téměř nulová (je mi 45 takže spíše ruština), takže se tím těžko prokousávám. V podstatě zatím zkouším aplikace, které jsem měl ve WF předělat do WPF, tím se alespoň něco naučit a pochopit rozdíly. Abych ti posílal nějaké kódy je zatím asi předčasné, opravdu to jsou jen začátky.

Editováno 22.2.2015 8:40
 
Nahoru Odpovědět
22.2.2015 8:39
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:22.2.2015 14:32
https://bitbucket.org/Pakosh/mvvmhelper

Udělal jsem ti tam i example :)

 
Nahoru Odpovědět
22.2.2015 14:32
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:22.2.2015 16:00

Díky moc.

 
Nahoru Odpovědět
22.2.2015 16:00
Avatar
Odpovídá na Jan Vargovský
sadlomaslox25:22.2.2015 18:45

no dival sem se na ten tvuj mvvm helper a musim teda nesouhlasit se spoustou veci:

  • RelayCommand je teda podle me uplne spatne protoze ignorujes vstupni parametry.
  • ViewLocator Default neni threadsafe. Pointa memory bariery ve statickem konstruktoru mi unikla.
  • ViewModelBase me prijde duplikovana funkcionalita pro Close a OnClosed
  • ViewLocator jelikoz nepouzivas Weak reference tak ti vznikaji memory leaky
  • u examplu ti chyby ten MainViewModel
 
Nahoru Odpovědět
22.2.2015 18:45
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na sadlomaslox25
Jan Vargovský:22.2.2015 19:33

Mi ukaž tvojí implementaci. Prošel jsem x způsobů jak to kdo implementuje a vzal si od každého trochu.

 
Nahoru Odpovědět
22.2.2015 19:33
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:22.2.2015 19:38

Ten MainViewModel tam opravdu chybí. K implementaci nemohu říci nic, protože v tom řádně plavu!

 
Nahoru Odpovědět
22.2.2015 19:38
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:22.2.2015 19:47

Už tam je.

 
Nahoru Odpovědět
22.2.2015 19:47
Avatar
Odpovídá na Jan Vargovský
sadlomaslox25:22.2.2015 20:15

aktualne jsem dlouho nic nevyvijel v MVVM, ale kdyz jsem delal tak sem pouzival vetsinou uz existujici frameworky. ale napr. pro command je jeden ze zakladnich usecase UserListVM.Show­DetailsForUser­Command(user); (zde se da namitnout ze muze existovat property SelectedUser na ViewModelu, ze ktere si to command vytahne ale to muze v nekterych scenarich vest ke komplikacim v UI vrstve)

 
Nahoru Odpovědět
22.2.2015 20:15
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na sadlomaslox25
Jan Vargovský:22.2.2015 20:39

Jaké? Já znám jen Prism a MVVMLight. Resp., znám jich více, ale o těhle jsem slyšel nejvícekrát.

 
Nahoru Odpovědět
22.2.2015 20:39
Avatar
Odpovídá na Jan Vargovský
sadlomaslox25:23.2.2015 9:30

Tak ja mam osobne zkusenosti s MVVMCross a taky napr. ReactiveUI.

 
Nahoru Odpovědět
23.2.2015 9:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 30 zpráv z 30.