redondeados redondeado personalizados estilo botones boton c# wpf

c# - redondeado - ¿Cómo agrego un comando enrutado personalizado en WPF?



botones redondeados en wpf (3)

Tengo una aplicación que contiene menús y submenús. He adjuntado Comandos de aplicación a algunos de los elementos del menú secundario como Cortar, Copiar y Pegar.
También tengo algunos otros elementos del menú que no tienen comandos de aplicación.
¿Cómo podría agregar un enlace de comando personalizado a esos elementos del menú secundario?
He revisado this artículo pero no he podido adjuntar evento a mis elementos del menú secundario.


En lugar de definirlos en una clase estática, también podría declarar los comandos directamente en XAML. Ejemplo (adaptado del buen ejemplo de Guffas):

<Window.Resources> <RoutedUICommand x:Key="DoSomethingCommand" Text="Do Something" /> <RoutedUICommand x:Key="DoSomethingElseCommand" Text="Do Something Else" /> </Window.Resources> <Window.CommandBindings> <CommandBinding Command="{StaticResource DoSomethingCommand}" Executed="CommandBinding_DoSomething" /> <CommandBinding Command="{StaticResource DoSomethingElseCommand}" Executed="CommandBinding_DoSomethingElse" /> </Window.CommandBindings> ... <MenuItem Name="Menu_DoSomething" Header="Do Something" Command="{StaticResource DoSomethingCommand}" />


Utilizo una clase estática que coloco después de la clase Window1 (o lo que sea que la clase de ventana tenga el nombre) donde creo instancias de la clase RoutedUICommand:

public static class Command { public static readonly RoutedUICommand DoSomething = new RoutedUICommand("Do something", "DoSomething", typeof(Window1)); public static readonly RoutedUICommand SomeOtherAction = new RoutedUICommand("Some other action", "SomeOtherAction", typeof(Window1)); public static readonly RoutedUICommand MoreDeeds = new RoutedUICommand("More deeds", "MoreDeeeds", typeof(Window1)); }

Agregue un espacio de nombre en el marcado de la ventana, usando el espacio de nombres en el que se encuentra la clase Window1:

xmlns:w="clr-namespace:NameSpaceOfTheApplication"

Ahora puedo crear enlaces para los comandos al igual que para los comandos de la aplicación:

<Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Open" Executed="CommandBinding_Open" /> <CommandBinding Command="ApplicationCommands.Paste" Executed="CommandBinding_Paste" /> <CommandBinding Command="w:Command.DoSomething" Executed="CommandBinding_DoSomething" /> <CommandBinding Command="w:Command.SomeOtherAction" Executed="CommandBinding_SomeOtherAction" /> <CommandBinding Command="w:Command.MoreDeeds" Executed="CommandBinding_MoreDeeds" /> </Window.CommandBindings>

Y usa los enlaces en un menú por ejemplo:

<MenuItem Name="Menu_DoSomething" Header="Do Something" Command="w:Command.DoSomething" />


Sé que mi respuesta es demasiado tarde , pero espero que ayude en el futuro .

Me gustan las respuestas de Guffa y Heinzi, pero puede usar solo un comando para lograr el resultado anterior. Usualmente uso el comando Ayuda

<Window.CommandBindings> <CommandBinding Command="{StaticResource Help}" Executed="HelpExecuted" /> </Window.CommandBindings>

y uso CommandParametr con cada llamada, por ejemplo

<Window.InputBindings> <KeyBinding Command="{StaticResource Help}" Key="A" Modifiers="Ctrl" CommandParameter="Case1"/> <KeyBinding Command="{StaticResource Help}" Key="B" Modifiers="Ctrl" CommandParameter="Case2"/> <KeyBinding Command="{StaticResource Help}" Key="C" Modifiers="Ctrl" CommandParameter="Case3"/> <KeyBinding Command="{StaticResource Help}" Key="D" Modifiers="Ctrl" CommandParameter="Case4"/> <MouseBinding Command="{StaticResource Help}" MouseAction="LeftDoubleClick" CommandParameter="Case5" /> </Window.InputBindings>

o

<Button Command="Help" CommandParameter="Case6" Content="Button"> <Button.InputBindings> <KeyBinding Command="{StaticResource Help}" Gesture="Ctrl+D" CommandParameter="Case7"/> </Button.InputBindings> </Button>

y en el archivo cs

private void HelpExecuted(object sender, ExecutedRoutedEventArgs e) { string str = e.Parameter as string; switch (str) { case null://F1 Pressed default Help //Code break; case "Case1": //Code break; case "Case2": //Code break; case "Case3": //Code break; case "Case4": break; case "Case5": //Code break; case "Case6": //Code break; case "Case7": //Code break; } e.Handled = true; }

y si estás usando el patrón MVVM

private void HelpExecuted(object sender, ExecutedRoutedEventArgs e) { string str = e.Parameter as string; Mvvm_Variable.Action(Input: str); e.Handled = true; }

y mueva el interruptor al sitio de ViewModule. y Acción es un método en la misma clase de ViewModule.