DRapp
DRapp

Reputation: 48139

Bug in UWP or am I missing something

I'm starting my first Universal Windows app. First thing I wanted was to subclass the main "Page" class for navigation. For simple purposes, I wanted to just add a RightTapped event hook to display a message of the actual page displayed...

Anyhow, I created a brand new project. Created a single class MyPage

public class MyPage : Page
{
    public MyPage()
    {
        RightTapped += MyPage_RightTapped;
    }

    private async void MyPage_RightTapped(object sender, RightTappedRoutedEventArgs e)
    {
        var dialog = new MessageDialog("This page is " + GetType(), "What is my form");
        await dialog.ShowAsync();
    }
}

Then on the default main form, I changed MainPage.xaml from

<Page

to

<local:MyPage

In the codebehind, I changed

public sealed partial class MainPage : Page

to

public sealed partial class MainPage

Run the form, it works, right-click on keyboard and message comes up.

Now the problem. In the main page, at the Grid declaration, it is define with a background...

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

If I remove this color (the actual color default is "#FFFFFFFF")

<Grid>

the RightTapped even no longer works and this is the ONLY change. I put in a background of any other color and RightTapped works.

Can anyone explain this and why it fails without background color which should not have any bearing vs working with a background?

Upvotes: 2

Views: 181

Answers (1)

IInspectable
IInspectable

Reputation: 51414

This sounds like it's documented behavior. The documentation for UIElement.RightTapped contains some relevant hints:

For touch actions and also for interaction-specific or manipulation events that are consequences of a touch action, an element must be hit-test visible in order to be the event source and fire the event that is associated with the action. UIElement.Visibility must be Visible. Other properties of derived types also affect hit-test visibility. For more info, see Events and routed events overview.

And the details from Events and routed events overview: Hit testing and input events:

There are several factors that affect hit testing, but you can determine whether a given element can fire input events by checking its IsHitTestVisible property. This property returns true only if the element meets these criteria:

  • The element's Visibility property value is Visible.
  • The element's Background or Fill property value is not null. A nullBrush value results in transparency and hit test invisibility. (To make an element transparent but also hit testable, use a Transparent brush instead of null.)

The Grid's Background property (inherited from Panel) defaults to null, making the Grid without a Background XAML attribute invisible to hit-testing.

Upvotes: 3

Related Questions