WPF ApplicationCommands.Paste
Quote from Lucio_B on 29/03/2021, 13:40ciao a tutti,
Sto provando ad usare i commands in WPF direttamente nello XAML lo scopo è copiare dagli appunti un immagine dentro un controllo <Image> il codice XAML è il seguente:
<Image Height="450" Width="450" Name="immagine" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Seleziona" Margin="10,10,10,0" />
<Button Content="Incolla" Margin="10,10,10,0" Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=immagine}"/>
</StackPanel>l'unico effetto che ottengo è che il button si disattiva come se non avesse niente negli appunti da copiare anche se so che c'è un immagine..
ho fatto una prova anche con un testo
<TextBox Width="335" IsEnabled="False" Name="testoprova"/>
<Button Content="Incolla" Margin="20" Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=testoprova}"/>
Stessa cosa ottengo solo che il bottone si disattiva.. sicuramente mi son perso qualcosa.. ma non so cosa 🙂
ciao a tutti,
Sto provando ad usare i commands in WPF direttamente nello XAML lo scopo è copiare dagli appunti un immagine dentro un controllo <Image> il codice XAML è il seguente:
<Image Height="450" Width="450" Name="immagine" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Seleziona" Margin="10,10,10,0" />
<Button Content="Incolla" Margin="10,10,10,0" Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=immagine}"/>
</StackPanel>
l'unico effetto che ottengo è che il button si disattiva come se non avesse niente negli appunti da copiare anche se so che c'è un immagine..
ho fatto una prova anche con un testo
<TextBox Width="335" IsEnabled="False" Name="testoprova"/>
<Button Content="Incolla" Margin="20" Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=testoprova}"/>
Stessa cosa ottengo solo che il bottone si disattiva.. sicuramente mi son perso qualcosa.. ma non so cosa 🙂
Quote from sabrina_c on 29/03/2021, 17:40Hai implementato il Command Binding per i command?
<Window.CommandBindings>
<CommandBinding
CanExecute="Test_CanExecute"
Command="{x:Static lcmd:NsAppCommands.ServiceActions}"
Executed="Test_Executed" />
<Window.CommandBindings>E ovviamente i due event handler conseguenti
lcmd è un namespace della mia applicazione in cui si trova la classe che contiene i routed command:
xmlns:lcmd="clr-namespace:IOME.Applicazione.Commands"
Non ricordo esattamente come va agganciato il command di ApplicationCommands perché mi piace definirmeli da me. ma solitamente i command poi si chiamano così nel Button o ribbon o quel che vuoi:
Command="{x:Static lcmd:NsAppCommands.ServiceActions}" CommandParameter="Start"Eventualmente passando un parametro per usare lo stesso command per più cose.
private void ServiceActions_CanExecute(object sender, CanExecuteRoutedEventArgs e) { string para = null; if (e.Parameter != null) { para = e.Parameter.ToString(); } switch (para) { case "Start": e.CanExecute = WModel.ServiceStatus != Base.Services.NsServiceStates.Running; break; case "Stop": e.CanExecute = WModel.ServiceStatus == Base.Services.NsServiceStates.Running; break; default: e.CanExecute = false; break; } } /// <summary> /// Evento di gestione command permette lo start e stop del servizio. /// </summary> /// <param name="sender">Command</param> /// <param name="e">Parametri del command</param> private void ServiceActions_Executed(object sender, ExecutedRoutedEventArgs e) { WModel.SwitchService(); }Questa è l'implementazione degli eventi, CanExecute attiva o disattiva i Button (o qualsiasi controllo) che chiama il command, se vuoi che sia sempre attivo metti solo e.CanExecute = true;
public static class NsAppCommands { /// <summary> /// Command per il controllo del servizio /// </summary> public static readonly RoutedCommand ServiceActions = new RoutedCommand(); }E questa è la classe che implementa i command.
In questo caso è un command che permette di fare lo start o lo stop di un servizio windows.
Spero di averti dato una mano.
Hai implementato il Command Binding per i command?
<Window.CommandBindings>
<CommandBinding
CanExecute="Test_CanExecute"
Command="{x:Static lcmd:NsAppCommands.ServiceActions}"
Executed="Test_Executed" />
<Window.CommandBindings>
E ovviamente i due event handler conseguenti
lcmd è un namespace della mia applicazione in cui si trova la classe che contiene i routed command:
xmlns:lcmd="clr-namespace:IOME.Applicazione.Commands"
Non ricordo esattamente come va agganciato il command di ApplicationCommands perché mi piace definirmeli da me. ma solitamente i command poi si chiamano così nel Button o ribbon o quel che vuoi:
Command="{x:Static lcmd:NsAppCommands.ServiceActions}" CommandParameter="Start"
Eventualmente passando un parametro per usare lo stesso command per più cose.
private void ServiceActions_CanExecute(object sender, CanExecuteRoutedEventArgs e) { string para = null; if (e.Parameter != null) { para = e.Parameter.ToString(); } switch (para) { case "Start": e.CanExecute = WModel.ServiceStatus != Base.Services.NsServiceStates.Running; break; case "Stop": e.CanExecute = WModel.ServiceStatus == Base.Services.NsServiceStates.Running; break; default: e.CanExecute = false; break; } } /// <summary> /// Evento di gestione command permette lo start e stop del servizio. /// </summary> /// <param name="sender">Command</param> /// <param name="e">Parametri del command</param> private void ServiceActions_Executed(object sender, ExecutedRoutedEventArgs e) { WModel.SwitchService(); }
Questa è l'implementazione degli eventi, CanExecute attiva o disattiva i Button (o qualsiasi controllo) che chiama il command, se vuoi che sia sempre attivo metti solo e.CanExecute = true;
public static class NsAppCommands { /// <summary> /// Command per il controllo del servizio /// </summary> public static readonly RoutedCommand ServiceActions = new RoutedCommand(); }
E questa è la classe che implementa i command.
In questo caso è un command che permette di fare lo start o lo stop di un servizio windows.
Spero di averti dato una mano.