XAML: gestione degli eventi

Il concetto generale di eventi in XAML è simile agli eventi in altri linguaggi di programmazione diffusi come .NET e C ++. In XAML, tutti i controlli espongono alcuni eventi in modo che possano essere sottoscritti per scopi specifici.

Ogni volta che si verifica un evento, l'applicazione riceverà una notifica e il programma può reagire, ad esempio, i pulsanti di chiusura vengono utilizzati per chiudere una finestra di dialogo.

Esistono molti tipi di eventi che possono essere sottoscritti per diversi comportamenti di un'applicazione in base ai requisiti di tale applicazione, ma gli eventi più comunemente utilizzati sono quelli relativi al mouse e alla tastiera come,

  • Click
  • MouseDown
  • MouseEnter
  • MouseLeave
  • MouseUp
  • KeyDown
  • KeyUp

In questo capitolo, useremo alcuni degli eventi di base e più comunemente usati per capire come un evento di un controllo specifico possa essere collegato al codice dietro dove verrà implementato il comportamento a seconda di ciò che l'utente vuole fare quando un evento specifico si verifica.

Diamo un'occhiata a un semplice esempio di un evento clic su un pulsante. Di seguito è riportata l'implementazione XAML per il controllo Button che viene creato e inizializzato con alcune proprietà e un evento Click (Click = "OnClick").

<Window x:Class = "XAMLEventHandling.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   Title = "MainWindow" Height = "350" Width = "604"> 
	
   <Grid> 
      <Button x:Name = "button1" Content = "Click" Click = "OnClick" 
         Width = "150" Height = "30" HorizontalAlignment = "Center" /> 
   </Grid>
   
</Window>

Ogni volta che si fa clic su questo pulsante, verrà attivato un file OnClicked è possibile aggiungere qualsiasi tipo di comportamento in risposta al clic. Diamo un'occhiata all'implementazione dell'evento OnClick che mostrerà un messaggio quando si fa clic su questo pulsante.

using System; 
using System.Windows; 
using System.Windows.Controls;  

namespace XAMLEventHandling {
   /// <summary> 
      /// Interaction logic for MainWindow.xaml 
   /// </summary> 
	
   public partial class MainWindow : Window {
      public MainWindow() { 
         InitializeComponent(); 
      }
      private void OnClick(object sender, RoutedEventArgs e) { 
         MessageBox.Show("Button is clicked!"); 
      } 
   }
}

Quando compili ed esegui il codice sopra, produrrà il seguente output:

Quando si fa clic sul pulsante, verrà attivato l'evento clic (OnClick) e verrà visualizzato il seguente messaggio.

Ora diamo un'occhiata a un esempio un po 'complesso in cui vengono gestiti più eventi.

Esempio

L'esempio seguente contiene una casella di testo con ContextMenu che manipola il testo all'interno della casella di testo.

Il codice XAML seguente crea un TextBox, un ContextMenu e MenuItems con alcune proprietà ed eventi come Checked, Unchecked e Click.

<Window x:Class = "XAMLContextMenu.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   Title = "MainWindow" Height = "350" Width = "604"> 
	
   <Grid> 
      <TextBox Name = "textBox1" TextWrapping = "Wrap" Margin = "10" Grid.Row = "7"> 
         Hi, this is XAML tutorial. 
         <TextBox.ContextMenu>
         
            <ContextMenu>
               <MenuItem Header = "_Bold" IsCheckable = "True" 
                  Checked = "Bold_Checked" Unchecked = "Bold_Unchecked" /> 
               <MenuItem Header = "_Italic" IsCheckable = "True" 
                  Checked = "Italic_Checked" Unchecked = "Italic_Unchecked" /> 
               <Separator /> 
               <MenuItem Header = "Increase Font Size" Click = "IncreaseFont_Click" />
               <MenuItem Header = "_Decrease Font Size" Click = "DecreaseFont_Click" /> 
            </ContextMenu> 
				
         </TextBox.ContextMenu>
      </TextBox>
   </Grid> 
	
</Window>

Ecco l'implementazione in C # per i diversi eventi che verranno attivati ​​ogni volta che una voce di menu viene selezionata, deselezionata o cliccata.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data;  

namespace XAMLContextMenu { 
   /// <summary> 
      /// Interaction logic for MainWindow.xaml 
   /// </summary>
	
   public partial class MainWindow : Window {
      public MainWindow() { 
         InitializeComponent(); 
      }
      private void Bold_Checked(object sender, RoutedEventArgs e) { 
         textBox1.FontWeight = FontWeights.Bold; 
      }
      private void Bold_Unchecked(object sender, RoutedEventArgs e) { 
         textBox1.FontWeight = FontWeights.Normal; 
      }
      private void Italic_Checked(object sender, RoutedEventArgs e) { 
         textBox1.FontStyle = FontStyles.Italic; 
      }
      private void Italic_Unchecked(object sender, RoutedEventArgs e) { 
         textBox1.FontStyle = FontStyles.Normal; 
      }
      private void IncreaseFont_Click(object sender, RoutedEventArgs e) { 
         if (textBox1.FontSize < 18) { 
            textBox1.FontSize += 2; 
         } 
      }
      private void DecreaseFont_Click(object sender, RoutedEventArgs e) { 
         if (textBox1.FontSize > 10) { 
            textBox1.FontSize -= 2; 
         } 
      }
   }
}

Quando compili ed esegui il codice sopra, produrrà il seguente output:

Ti consigliamo di eseguire il codice di esempio precedente e di sperimentare altri eventi.

Eventi

Sr.No. Controlli e descrizione
1

Checked

Viene eseguito quando viene selezionato un ToggleButton. (Ereditato da ToggleButton)

2

Click

Si verifica quando si fa clic su un controllo pulsante. (Ereditato da ButtonBase)

3

ContextMenuClosing

Si verifica appena prima della chiusura di qualsiasi menu di scelta rapida sull'elemento. (Ereditato da FrameworkElement.)

4

ContextMenuOpening

Si verifica quando viene aperto un menu di scelta rapida sull'elemento. (Ereditato da FrameworkElement.)

5

DataContextChanged

Si verifica quando il valore della proprietà FrameworkElement.DataContext cambia. (Ereditato da FrameworkElement)

6

DragEnter

Si verifica quando il sistema di input segnala un evento di trascinamento sottostante con questo elemento come destinazione. (Ereditato da UIElement).

7

DragLeave

Si verifica quando il sistema di input segnala un evento di trascinamento sottostante con questo elemento come origine. (Ereditato da UIElement)

8

DragOver

Si verifica quando il sistema di input segnala un evento di trascinamento sottostante con questo elemento come potenziale destinazione di rilascio. (Ereditato da UIElement)

9

DragStarting

Si verifica quando viene avviata un'operazione di trascinamento. (Ereditato da UIElement)

10

DropCompleted

Si verifica al termine di un'operazione di trascinamento. (Ereditato da UIElement)

11

DropDownClosed

Si verifica quando si chiude la parte a discesa di ComboBox.

12

DropDownOpened

Si verifica quando si apre la parte a discesa di ComboBox.

13

GotFocus

Si verifica quando un oggetto UIElement riceve lo stato attivo. (Ereditato da UIElement)

14

Holding

Occurs when an otherwise unhandled Hold interaction occurs over the hit test area of this element. (Inherited from UIElement)

15

Intermediate

Fires when the state of a ToggleButton is switched to the indeterminate state. (Inherited from ToggleButton)

16

IsEnabledChanged

Occurs when the IsEnabled property changes. (Inherited from Control)

17

KeyDown

Occurs when a keyboard key is pressed while the UIElement has focus. (Inherited from UIElement)

18

KeyUp

Occurs when a keyboard key is released while the UIElement has focus. (Inherited from UIElement)

19

LostFocus

Occurs when a UIElement loses focus. (Inherited from UIElement)

20

ManipulationCompleted

Occurs when a manipulation on the UIElement is complete. (Inherited from UIElement)

21

ManipulationDelta

Occurs when the input device changes position during a manipulation. (Inherited from UIElement)

22

ManipulationInertiaStarting

Occurs when the input device loses contact with the UIElement object during a manipulation and inertia begins. (Inherited from UIElement)

23

ManipulationStarted

Occurs when an input device begins a manipulation on the UIElement. (Inherited from UIElement)

24

ManipulationStarting

Occurs when the manipulation processor is first created. (Inherited from UIElement)

25

SelectionChanged

Occurs when the text selection has changed.

26

SizeChanged

Occurs when either the ActualHeight or the ActualWidth property changes value on a FrameworkElement. (Inherited from FrameworkElement)

27

Unchecked

Occurs when a ToggleButton is unchecked. (Inherited from ToggleButton)

28

ValueChanged

Occurs when the range value changes. (Inherited from RangeBase)