This article demonstrates the mouse pointer events that can be used to update or change the visual state of the application UI in Windows Store Apps using XAML and C#.
In this article I show the uses of pointer events such as Pointer Entered and Pointer Existed and how to associate these with the mouse pointer.
Here is how to create Pointer Events.
Step 1
Here is some XAML markup code that specifies the event that occurs:
<Page
x:Class="drawingapp.BlankPage1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:drawingapp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="Output" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="2">
<StackPanel ManipulationMode="All" Margin="30,50">
<Border x:Name="bEnteredExited" Background="Red" Height="300" Width="450" CornerRadius="20" HorizontalAlignment="Left">
<Grid>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="bEnteredExitedTextBlock"/>
<Ellipse VerticalAlignment="Bottom" Stroke="Silver" StrokeDashArray="2,2" StrokeThickness="2" Margin="2" x:Name="bEnteredExitedTimer" Width="20" Height="20" RenderTransformOrigin="0.5,0.5">
<Ellipse.RenderTransform >
<RotateTransform Angle="0" />
</Ellipse.RenderTransform>
</Ellipse>
</Grid>
</Border>
</StackPanel>
</Grid>
</Grid>
</Page>
Step 2
Here is the .cs file code.
Associate the Pointer events in the Page load method, as in:
public BlankPage1()
{
this.InitializeComponent();
bEnteredExited.PointerEntered += new PointerEventHandler(bEnteredExited_PointerEntered);
bEnteredExited.PointerExited += new PointerEventHandler(bEnteredExited_PointerExited);
//To code for multiple Pointers (i.e. Fingers) we track how many entered/exited.
_pointerCount = 0;
}
Coding of Pointer Entered events:
void bEnteredExited_PointerEntered(object sender, PointerRoutedEventArgs e)
{
_pointerCount++;
UpdateVisuals(sender as Border, "Entered");
}
Coding of Pointer Existed events:
void bEnteredExited_PointerExited(object sender, PointerRoutedEventArgs e)
{
_pointerCount--;
UpdateVisuals(sender as Border, "Exited");
}
Here is the code to update the visual state of the application:
void UpdateVisuals(Border border, String eventDescription)
{
switch (eventDescription.ToLower())
{
case "exited":
if (_pointerCount <= 0)
{
border.Background = new SolidColorBrush(Colors.Green);
bEnteredExitedTextBlock.Text = eventDescription;
}
break;
case "moved":
RotateTransform rt = (RotateTransform)bEnteredExitedTimer.RenderTransform;
rt.Angle += 2;
if (rt.Angle > 360) rt.Angle -= 360;
break;
default:
border.Background = new SolidColorBrush(Colors.Red);
bEnteredExitedTextBlock.Text = eventDescription;
break;
}
}
Full code of the .cs file:
using System;
using Windows.Foundation;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace drawingapp
{
public sealed partial class BlankPage1 : Page
{
int _pointerCount;
public BlankPage1()
{
this.InitializeComponent();
bEnteredExited.PointerEntered += new PointerEventHandler(bEnteredExited_PointerEntered);
bEnteredExited.PointerExited += new PointerEventHandler(bEnteredExited_PointerExited);
//To code for multiple Pointers (i.e. Fingers) we track how many entered/exited.
_pointerCount = 0;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
void bEnteredExited_PointerExited(object sender, PointerRoutedEventArgs e)
{
_pointerCount--;
Scenario2UpdateVisuals(sender as Border, "Exited");
}
void bEnteredExited_PointerEntered(object sender, PointerRoutedEventArgs e)
{
_pointerCount++;
Scenario2UpdateVisuals(sender as Border, "Entered");
}
void Scenario2UpdateVisuals(Border border, String eventDescription)
{
switch (eventDescription.ToLower())
{
case "exited":
if (_pointerCount <= 0)
{
border.Background = new SolidColorBrush(Colors.Green);
bEnteredExitedTextBlock.Text = eventDescription;
}
break;
case "moved":
RotateTransform rt = (RotateTransform)bEnteredExitedTimer.RenderTransform;
rt.Angle += 2;
if (rt.Angle > 360) rt.Angle -= 360;
break;
default:
border.Background = new SolidColorBrush(Colors.Red);
bEnteredExitedTextBlock.Text = eventDescription;
break;
}
}
}
}
Step 3
Now run the application to see the output.
Hover the mouse pointer over the rectangle. When the pointer enters it, the color of the rectangle becomes red; see:
Move the mouse pointer away from the rectangle. When you exist the pointer from it, the color of rectangle becomes green.

Comments
Join the conversation! Your thoughts help the community grow.