Diskuze: Klávesové zkratky ve C# WPF
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 30 zpráv z 30.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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ě
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();
}
}
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();
}
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.
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"/>
Díky. A lze to udělat i tak, že ve Window.CommandBindings 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.
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í
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.
RoutedUICommand nepoužívej. Implementuj si ICommand sám. Tohle slouží trošku k nečemu jinému.
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.
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
Ten RoutedUIComand jsem vyřešil pomocí RoutedComand a použil jsem to v App.xaml v Application.Resources pro celou aplikaci. A chodí to normálně, možná trochu rychleji.
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ě.
Můžeš mi poslat nějaký odkaz na nějaký tutorial o MVVM architektuře? Díky
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
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.
https://bitbucket.org/Pakosh/mvvmhelper
Udělal jsem ti tam i example
no dival sem se na ten tvuj mvvm helper a musim teda nesouhlasit se spoustou veci:
Mi ukaž tvojí implementaci. Prošel jsem x způsobů jak to kdo implementuje a vzal si od každého trochu.
Ten MainViewModel tam opravdu chybí. K implementaci nemohu říci nic, protože v tom řádně plavu!
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.ShowDetailsForUserCommand(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)
Jaké? Já znám jen Prism a MVVMLight. Resp., znám jich více, ale o těhle jsem slyšel nejvícekrát.
Tak ja mam osobne zkusenosti s MVVMCross a taky napr. ReactiveUI.
Zobrazeno 30 zpráv z 30.