Silverlight-입력 처리

이 장에서는 Silverlight 응용 프로그램에서 사용자 입력을 처리하는 방법에 대해 알아 봅니다. Silverlight는 응용 프로그램이 마우스, 키보드, 터치 등과 같은 다양한 장치에서 입력을받을 수있는 강력한 API를 제공합니다.

입력 유형

사용자가 애플리케이션과 상호 작용할 수있는 여러 가지 방법이 있습니다. 가장 확실한 방법은 마우스를 사용하는 것입니다. Silverlight는 추적을위한 이벤트를 제공합니다.

  • 마우스 움직임
  • 버튼 클릭 및
  • 휠 활동

물론 키보드도 있으며 Silverlight는 터치 스크린 입력도 지원합니다. Windows의 터치 지원에 익숙하다면 터치 입력이 자세한 정보를 제공하는 낮은 수준의 이벤트로 표시되거나 제스처라고하는 높은 수준의 이벤트로 요약 될 수 있음을 알고 있습니다.

마우스 이벤트

Silverlight가 제공하는 마우스 입력 이벤트를 살펴 보겠습니다. 일부 이벤트는 마우스 포인터의 이동과 관련이 있습니다.

  • 그만큼 MouseMove 이벤트는 처리기를 연결 한 요소 위에있는 동안 포인터가 이동할 때마다 발생합니다.

  • 당신은 또한 얻을 MouseEnterMouseLeave 마우스가 요소 안팎으로 이동할 때 알려주는 이벤트입니다.

다음은 타원과 TextBlock이 추가 된 XAML 코드입니다.

<UserControl x:Class="MouseInput.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d" 
   d:DesignHeight = "300" d:DesignWidth = "400">  
   
   <Grid x:Name = "LayoutRoot" Background = "White">
	
      <TextBlock x:Name = "mouseText" FontSize = "40" 
         VerticalAlignment = "Top" Height = "76" Margin = "0,10,0,0" />
			 
      <Ellipse
         Name = "myEllipse"  
         Width = "320" Height = "150" HorizontalAlignment = "Left" 
         VerticalAlignment = "Top" Margin = "27,103,0,0" 
         Stroke = "Black" StrokeThickness = "10" Fill = "#00FF0000" 
         MouseEnter = "myEllipse_MouseEnter" 
         MouseLeave = "myEllipse_MouseLeave" 
         MouseMove = "myEllipse_MouseMove" /> 
			
   </Grid> 
	
</UserControl>

아래에 주어진 다른 구현은 mouse input 이벤트.

using System.Windows.Controls; 
using System.Windows.Input; 
using System.Windows.Media; 
 
namespace MouseInput { 

   public partial class MainPage : UserControl { 
	
      public MainPage() { 
         InitializeComponent(); 
      } 
     
      private void myEllipse_MouseEnter(object sender, MouseEventArgs e) { 
         mouseText.Text = "Mouse Enter"; 
         myEllipse.Stroke = new SolidColorBrush(Colors.Blue); 
      }  
      
      private void myEllipse_MouseLeave(object sender, MouseEventArgs e) { 
         mouseText.Text = "Mouse Leave"; 
         myEllipse.Stroke = new SolidColorBrush(Colors.Black);  
      }  
      
      private void myEllipse_MouseMove(object sender, MouseEventArgs e) { 
         mouseText.Text = "Mouse Move: " + e.GetPosition(myEllipse);  
      }  
   } 
}

위의 코드가 컴파일되고 실행되면 다음과 같은 출력이 표시됩니다.

마우스가 타원에 들어가면 색상과 좌표의 변화를 볼 수 있습니다.

마우스가 타원을 벗어나면 'mouse leave'기본 색상으로 변경됩니다.

건반

사용자가 애플리케이션에 텍스트 데이터를 입력하는 가장 쉬운 방법은 가능한 경우 키보드를 사용하는 것입니다. 노트북과 데스크톱을 제외한 모든 모바일 장치에 키보드가있는 것은 아닙니다.

  • Silverlight는 키보드 입력에 대해 두 가지 간단한 이벤트를 제공합니다. KeyUpKeyDown.

  • 이 두 가지 모두 KeyEventArgs 핸들러에 전달되고 Key 속성은 눌린 키를 나타냅니다.

  • 아래 예에서는 일부 키보드 입력이 처리됩니다.

  • 다음 예제에서는 Click 이벤트에 대한 처리기와 KeyDown 행사.

다음은 다른 UI 요소가 추가 된 XAML 코드입니다.

<UserControl x:Class = "KeyboardInput.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d" 
   d:DesignHeight = "300" d:DesignWidth = "400">
	
   <Grid x:Name = "LayoutRoot" Background = "White">
	
      <StackPanel Orientation = "Horizontal" KeyDown = "OnTextInputKeyDown"> 
         <TextBox Width = "400" Height = "30" Margin = "10"/> 
			
         <Button Click = "OnTextInputButtonClick" 
            Content = "Open" Margin = "10" Width = "50" Height = "30"/> 
				
      </StackPanel>
		
   </Grid> 
	
</UserControl>

다음은 다른 키보드 및 클릭 이벤트가 처리되는 C # 코드입니다.

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Input;
  
namespace KeyboardInput {

   public partial class MainPage : UserControl { 
	
      public MainPage() { 
         InitializeComponent(); 
      } 
		
      private void OnTextInputKeyDown(object sender, KeyEventArgs e) { 
         if (e.Key == Key.O) { 
            handle(); 
            e.Handled = true; 
         } 
      } 
		
      private void OnTextInputButtonClick(object sender, RoutedEventArgs e) { 
         handle(); 
         //e.Handled = true; 
      } 
		
      public void handle() { 
         MessageBox.Show("Do you want to open a file?"); 
      }  
   } 
}

위의 코드가 컴파일되고 실행되면 다음을 볼 수 있습니다.

클릭하면 Open 버튼을 누르거나 텍스트 상자를 클릭하고 OK, 그러면 동일한 메시지가 표시됩니다.

더 나은 이해를 위해 위의 예를 실행하는 것이 좋습니다.