¿Podría proporcionarnos una muestra de cómo se implementa la interfaz ICommandSource
? Como quiero que mi UserControl
, que no tiene la capacidad de especificar el comando en xaml, tenga esta capacidad. Y para poder manejar el comando cuando el usuario hace clic en CustomControl
.En WPF, ¿cómo impleno ICommandSource para dar a mi capacidad de control personalizado el uso de Comando desde xaml?
9
A
Respuesta
18
He aquí un ejemplo:
public partial class MyUserControl : UserControl, ICommandSource
{
public MyUserControl()
{
InitializeComponent();
}
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(MyUserControl), new UIPropertyMetadata(null));
public object CommandParameter
{
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
// Using a DependencyProperty as the backing store for CommandParameter. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.Register("CommandParameter", typeof(object), typeof(MyUserControl), new UIPropertyMetadata(null));
public IInputElement CommandTarget
{
get { return (IInputElement)GetValue(CommandTargetProperty); }
set { SetValue(CommandTargetProperty, value); }
}
// Using a DependencyProperty as the backing store for CommandTarget. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandTargetProperty =
DependencyProperty.Register("CommandTarget", typeof(IInputElement), typeof(MyUserControl), new UIPropertyMetadata(null));
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
var command = Command;
var parameter = CommandParameter;
var target = CommandTarget;
var routedCmd = command as RoutedCommand;
if (routedCmd != null && routedCmd.CanExecute(parameter, target))
{
routedCmd.Execute(parameter, target);
}
else if (command != null && command.CanExecute(parameter))
{
command.Execute(parameter);
}
}
}
Tenga en cuenta que la propiedad CommandTarget
sólo se utiliza para RoutedCommands
0
Su UserControl tendrá un código detrás del archivo cs o vb, deberá implementar la interfaz ICommandSource, y una vez que implemente eso, en algún caso tendrá que invocar realmente el comando y también marcar CanExecute.
Cuestiones relacionadas
- 1. TextBox.TextChanged & ICommandSource
- 2. Desde WPF Control a Silverlight Control
- 3. WPF: ¿Cómo pasar Control completo como parámetro de comando a través de XAML?
- 4. wpf control personalizado no reconocido
- 5. WPF Control personalizado: DependencyProperty de tipo Colección
- 6. Uso de colores CMYK en WPF/XAML
- 7. ¿Establecer categoría de propiedad para el control personalizado de WPF?
- 8. Compatibilidad con el comando WPF en ComboBox
- 9. ¿Cómo se puede enlazar un control de usuario XAML personalizado?
- 10. Cómo pasar de referencia de un control a otro control en XAML
- 11. Plantilla de control personalizado de WPF no aplicada
- 12. Conversión de control WPF (XAML) en documento XPS
- 13. ¿Agregar propiedades al control WPF personalizado?
- 14. Forzar un control WPF personalizado para cambiar el tamaño correctamente
- 15. Cómo dar salida a mi texto de la línea de comando de ruby en diferentes colores
- 16. WPF estilo personalizado de control derivada
- 17. WPF tutorial para crear un usuario de control personalizado
- 18. Desactivar estilo en WPF XAML?
- 19. Uso de XAML en WinForms
- 20. Usando un control WPF personalizado en WinForms
- 21. WPF Custom Control - ¿Cómo prueba un control personalizado?
- 22. Cómo agregar un desencadenador a un control personalizado WPF sin anular el estilo existente?
- 23. agregando un espacio de nombres personalizado a xaml
- 24. Uso de gráficos vectoriales XAML en la aplicación WPF
- 25. Diferencia entre control de usuario y biblioteca de control personalizado
- 26. Visual Studio Diseñador XAML personalizado
- 27. ¿cómo impleno Django en AWS?
- 28. ContentControl personalizado en WPF
- 29. Base de datos personalizada para WPF-Control
- 30. ¿Puedo tener múltiples Comandos de Comando para el mismo Comando en el mismo control?
1, bonito ejemplo – Mizipzor
gran ejemplo! ¡Gracias! – Vitalij