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)