XAML - obsługa zdarzeń
Ogólna koncepcja zdarzeń w XAML jest podobna do zdarzeń w innych popularnych językach programowania, takich jak .NET i C ++. W języku XAML wszystkie kontrolki uwidaczniają niektóre zdarzenia, aby można je było subskrybować do określonych celów.
Za każdym razem, gdy ma miejsce zdarzenie, aplikacja zostanie o tym powiadomiona, a program będzie mógł na nie zareagować, np. Do zamknięcia okna służą przyciski zamykania.
Istnieje wiele typów zdarzeń, które można subskrybować dla różnych zachowań aplikacji w zależności od wymagań tej aplikacji, ale najczęściej używane są zdarzenia związane z myszą i klawiaturą, takie jak,
- Click
- MouseDown
- MouseEnter
- MouseLeave
- MouseUp
- KeyDown
- KeyUp
W tym rozdziale wykorzystamy niektóre z podstawowych i najczęściej używanych zdarzeń, aby zrozumieć, w jaki sposób zdarzenie określonej kontrolki może być połączone z kodem, za którym zaimplementowane zostanie zachowanie w zależności od tego, co użytkownik chce zrobić, gdy określone zdarzenie występuje.
Spójrzmy na prosty przykład zdarzenia kliknięcia przycisku. Poniżej podano implementację XAML dla kontrolki Button, która jest tworzona i inicjowana z niektórymi właściwościami i zdarzeniem 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>Każde kliknięcie tego przycisku spowoduje uruchomienie pliku OnClickzdarzenie i możesz dodać dowolny typ zachowania jako odpowiedź na kliknięcie. Przyjrzyjmy się implementacji zdarzenia OnClick, która wyświetli komunikat po kliknięciu tego przycisku.
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!"); 
      } 
   }
}Kiedy kompilujesz i wykonujesz powyższy kod, wygeneruje on następujący wynik -
 
                Po kliknięciu przycisku zostanie uruchomione zdarzenie click (OnClick) i zostanie wyświetlony następujący komunikat.
 
                Przyjrzyjmy się teraz nieco złożonemu przykładowi, w którym obsługiwanych jest wiele zdarzeń.
Przykład
Poniższy przykład zawiera pole tekstowe z ContextMenu, które manipuluje tekstem w polu tekstowym.
Poniższy kod XAML tworzy TextBox, ContextMenu i MenuItems z niektórymi właściwościami i zdarzeniami, takimi jak Checked, Unchecked i 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>Oto implementacja w C # dla różnych zdarzeń, które będą uruchamiane za każdym razem, gdy element menu zostanie zaznaczony, odznaczony lub kliknięty.
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; 
         } 
      }
   }
}Kiedy kompilujesz i wykonujesz powyższy kod, wygeneruje on następujący wynik -
 
                Zalecamy wykonanie powyższego przykładowego kodu i eksperymentowanie z innymi zdarzeniami.
Wydarzenia
| Sr.No. | Sterowanie i opis | 
|---|---|
| 1 | Checked Uruchamiany po zaznaczeniu ToggleButton. (Odziedziczone po ToggleButton) | 
| 2 | Click Występuje po kliknięciu kontrolki przycisku. (Odziedziczone po ButtonBase) | 
| 3 | ContextMenuClosing Występuje tuż przed zamknięciem dowolnego menu kontekstowego elementu. (Odziedziczone po FrameworkElement). | 
| 4 | ContextMenuOpening Występuje po otwarciu dowolnego menu kontekstowego elementu. (Odziedziczone po FrameworkElement). | 
| 5 | DataContextChanged Występuje po zmianie wartości właściwości FrameworkElement.DataContext. (Odziedziczone po FrameworkElement) | 
| 6 | DragEnter Występuje, gdy system wejściowy zgłasza bazowe zdarzenie przeciągania z tym elementem jako celem. (Odziedziczone po UIElement). | 
| 7 | DragLeave Występuje, gdy system wejściowy zgłasza bazowe zdarzenie przeciągania z tym elementem jako źródłem. (Odziedziczone po UIElement) | 
| 8 | DragOver Występuje, gdy system wejściowy zgłasza bazowe zdarzenie przeciągania z tym elementem jako potencjalnym celem upuszczania. (Odziedziczone po UIElement) | 
| 9 | DragStarting Występuje po zainicjowaniu operacji przeciągania. (Odziedziczone po UIElement) | 
| 10 | DropCompleted Występuje po zakończeniu operacji przeciągania i upuszczania. (Odziedziczone po UIElement) | 
| 11 | DropDownClosed Występuje po zamknięciu rozwijanej części ComboBox. | 
| 12 | DropDownOpened Występuje, gdy zostanie otwarta rozwijana część ComboBox. | 
| 13 | GotFocus Występuje, gdy element UIElement otrzyma fokus. (Odziedziczone po UIElement) | 
| 14 | Holding Występuje, gdy w innym przypadku nieobsłużona interakcja Hold w obszarze testu trafień tego elementu. (Odziedziczone po UIElement) | 
| 15 | Intermediate Pożary, gdy stan ToggleButton zostanie przełączony na stan nieokreślony. (Odziedziczone po ToggleButton) | 
| 16 | IsEnabledChanged Występuje po zmianie właściwości IsEnabled. (Odziedziczone po Control) | 
| 17 | KeyDown Występuje po naciśnięciu klawisza klawiatury, gdy element UIElement ma fokus. (Odziedziczone po UIElement) | 
| 18 | KeyUp Występuje, gdy klawisz klawiatury zostanie wydany, gdy UIElement ma fokus. (Odziedziczone po UIElement) | 
| 19 | LostFocus Występuje, gdy element UIElement traci fokus. (Odziedziczone po UIElement) | 
| 20 | ManipulationCompleted Występuje po zakończeniu manipulacji na UIElement. (Odziedziczone po UIElement) | 
| 21 | ManipulationDelta Występuje, gdy urządzenie wejściowe zmienia położenie podczas manipulacji. (Odziedziczone po UIElement) | 
| 22 | ManipulationInertiaStarting Występuje, gdy urządzenie wejściowe traci kontakt z obiektem UIElement podczas manipulacji i rozpoczyna się bezwładność. (Odziedziczone po UIElement) | 
| 23 | ManipulationStarted Występuje, gdy urządzenie wejściowe rozpoczyna manipulację na UIElement. (Odziedziczone po UIElement) | 
| 24 | ManipulationStarting Występuje po pierwszym utworzeniu procesora manipulacji. (Odziedziczone po UIElement) | 
| 25 | SelectionChanged Występuje po zmianie zaznaczenia tekstu. | 
| 26 | SizeChanged Występuje, gdy właściwość ActualHeight lub ActualWidth zmieni wartość na FrameworkElement. (Odziedziczone po FrameworkElement) | 
| 27 | Unchecked Występuje, gdy ToggleButton nie jest zaznaczone. (Odziedziczone po ToggleButton) | 
| 28 | ValueChanged Występuje, gdy zmienia się wartość zakresu. (Odziedziczone po RangeBase) |