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:

entered-pointer-event-in-windows-store-apps.png

Move the mouse pointer away from the rectangle. When you exist the pointer from it, the color of rectangle becomes green.

pointer-exit-event-in-windows-store-apps.jpg