Door het GridView met de muis scrollen

Wanneer je naar het Start scherm van Windows 8 krijgt heeft deze een paar mooie unieke features die niet standaard met het GridView control meekomen.

 

Zo heb je type to search. Hiermee kan je gewoon gaan typen in het start scherm en vervolgens word de search geactiveerd. Hoe je dit in jouw app kan ontwikkelen heb ik hier beschreven: http://www.familie-smits.com/post/2012/08/12/Type-to-search-in-Windows-8.aspx

 

Een andere mooie feature is dat je in het startscherm kan scrollen door je muis aan de zijkant van scherm houden en dan de muis naar blijft bewegen wat dan het GridView laat scrollen.

 

Ik heb een uitbreiding gemaakt op het GridView dat dit mogelijk maakt in je eigen app, de code van het control:

 

public class VariableSizeGridView : GridView
{
    private ScrollViewer scrollViewer;

    public VariableSizeGridView()
    {
        MouseDevice.GetForCurrentView().MouseMoved += VariableSizeGridView_MouseMoved;
    }

    protected override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        scrollViewer = GetVisualChild<ScrollViewer>(this);
    }

    private void VariableSizeGridView_MouseMoved(MouseDevice sender, MouseEventArgs args)
    {
        if (Window.Current.CoreWindow.PointerPosition.X == Window.Current.CoreWindow.Bounds.Left)
        {
            if (args.MouseDelta.X < 0)
            {
                scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + args.MouseDelta.X);
            }
        }

        if (Window.Current.CoreWindow.PointerPosition.X == Window.Current.CoreWindow.Bounds.Right - 1)
        {
            if (args.MouseDelta.X > 0)
            {
                scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + args.MouseDelta.X);
            }
        }
    }

    private T GetVisualChild<T>(DependencyObject parent) where T : DependencyObject
    {
        T child = default(T);
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
                child = GetVisualChild<T>(v);
            if (child != null)
                break;
        }
        return child;
    }
}

 

  •   @JenMsft @LocalJoost @vinothrajendran not sure if related but when i click update &amp; restart my machine restarts, bu… https://t.co/4muU3d7aGG
  •   RT @natfriedman: Today(!) we’re thrilled to announce unlimited free private repos for all GitHub users, and a new simplified Enterprise off…
  •   @rendyfaqot hi, Sorry to hear. There been some breaking change in the VSTS api... didn't had time yet on fixing tho… https://t.co/lZBMHu4CPf
  •   RT @ameijers: The Global MR Bootcamp was a blast! The biggest #mixedreality event in the world! And all made possible by you the community.…
  •   RT @LocalJoost: Attendants 'working at my Immersive Headset Development workshop at #GlobalMRBootcamp https://t.co/NaNtyO5Ocj
  •   Why do i always decide to change the whole approach of a session the evening before?
  •   @JenMsft @bing it's not working so well for high speed or the distance is a problem https://t.co/KE1kE0wQuF
  •   @danhellem @mmanela Nice!
  •   RT @danhellem: Check out the new changes for the Azure Boards work item tracking experiences in Visual Studio 2019 https://t.co/c4l0rQky1o…
  •   @LocalJoost you put a AAAA battery in your surface pro itself? or the pen?