Avatar
Maros2470
Člen
Avatar
Maros2470:

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
Redaktor
Avatar
Odpovídá na Maros2470
martinsakra:

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í
+1 bodů
Ř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:

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
Redaktor
Avatar
Odpovídá na Maros2470
martinsakra:

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:

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
Redaktor
Avatar
Odpovídá na Maros2470
martinsakra:

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:

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
Redaktor
Avatar
Odpovídá na Maros2470
martinsakra:

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  +1 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:

Díky

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

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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

 
Nahoru Odpovědět 21.2.2015 17:23
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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:

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:
https://bitbucket.org/Pakosh/mvvmhelper

Udělal jsem ti tam i example :)

 
Nahoru Odpovědět 22.2.2015 14:32
Avatar
Odpovídá na Jan Vargovský
sadlomaslox25:

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ý
Redaktor
Avatar
Odpovídá na sadlomaslox25
Jan Vargovský:

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:

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
Odpovídá na Jan Vargovský
sadlomaslox25:

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ý
Redaktor
Avatar
Odpovídá na sadlomaslox25
Jan Vargovský:

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:

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.