Si prega di fornire un esempio di come si implementa l'interfaccia ICommandSource
. Come voglio che il mio UserControl
, che non ha la possibilità di specificare il comando in xaml, abbia questa capacità. E per essere in grado di gestire il comando quando l'utente fa clic su CustomControl
.In WPF, come posso implementare ICommandSource per consentire al controllo personalizzato di utilizzare Command da xaml?
9
A
risposta
18
Ecco un esempio:
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);
}
}
}
notare che la proprietà CommandTarget
viene utilizzato solo per RoutedCommands
0
Il tuo UserControl avrà un codice dietro il file cs o vb, devi implementare l'interfaccia ICommandSource, e una volta implementato, in alcuni casi dovrai effettivamente richiamare il comando e anche controllare CanExecute.
Problemi correlati
- 1. Aggiunta di proprietà al controllo WPF personalizzato?
- 2. controllo personalizzato wpf non riconosciuto
- 3. Come posso applicare uno stile al Controllo finestre in WPF?
- 4. WPF Image Command Binding
- 5. Converti WPF (XAML) Controllo in documento XPS
- 6. Da WPF di controllo per Silverlight Controllo
- 7. Controllo personalizzato WPF: TemplateBinding to Image
- 8. XAML - Animazione semplice per un semplice controllo personalizzato
- 9. Come implementare un controllo Button Radio XAML con un'origine ObservableCollection?
- 10. Rinomina controllo in XAML
- 11. In XAML WPF come posso concatenare 2 costanti in modo da poter utilizzare percorsi predefiniti?
- 12. Acessing WPF XAML Risorse da codice non WPF
- 13. Come si crea un controllo utente XAML personalizzato collegabile?
- 14. Come implementare l'associazione dati per il controllo personalizzato di Windows?
- 15. Come posso aggiungere questo controllo WPF al mio WinForm?
- 16. Come utilizzare stringformat in multibinding in WPF XAML
- 17. Come implementare un allocatore personalizzato da utilizzare con std :: map?
- 18. Controllo personalizzato WPF - Modello ItemsControl non applicato
- 19. Come specificare una descrizione per un controllo in uno stile da XAML?
- 20. Come posso accedere al controllo di una finestra (richtextbox) da un'altra finestra in wpf?
- 21. Modello di controllo personalizzato WPF Legatura
- 22. Passando origine del ContextMenu in Command WPF
- 23. Blurry Adorner WPF XAML
- 24. Trova controllo WPF per nome
- 25. Come utilizzare i controlli personalizzati in WPF
- 26. Utilizzare un altro controllo come maschera di opacità in WPF?
- 27. Come posso consentire il trascinamento da Esplora risorse in un'applicazione C# WPF?
- 28. Come accedere al controllo WPF C# in modo thread-safe?
- 29. WPF/XAML - Consentire a ComboBox di avere SelectedValue che non è in ItemsSource
- 30. Accesso al valore di controllo utente WPF
+1, bell'esempio – Mizipzor
grande esempio! Grazie! – Vitalij