Continuando un poco con la estela del post anterior en el que hablaba de los Behaviors, en este vamos a ver como agregar una funcionalidad que puede ser bastante interesante en nuestras aplicaciones para Windows Store.
Lo que vamos a abordar, es como auto ocultar la barra de aplicación, según el tiempo deseado. Para resolver esta problematica vamos a agregar dos Dependency Properties a los controles de tipo AppBar:
– La primera una propiedad de tipo Booleana que será la encargada de indicar si se aplica el auto cierre o no. Dentro del establecimiento de esta propiedad vamos a agregar los manejadores de eventos para cuando se abrá la AppBar y cuando entre y salga el cursor dentro de ella (para parar el contador si el cursor está dentro de la AppBar)
– La segunda una propiedad de tipo Integer que servirá para expresar en segundos cuando se va a llevar a cabo el cierre de la AppBar. El valor por defecto de esta propiedad va a ser 5.
Al lio:
1: public class AppBarExtensions
2: {
3: public static AppBar appBar;
4:
5: public static readonly DependencyProperty AutoCloseTimeProperty = DependencyProperty.RegisterAttached("AutoCloseTime", typeof(int), typeof(AppBarExtensions),
6: new PropertyMetadata(5));
7:
8: public static int GetAutoCloseTime(UIElement element)
9: {
10: return (int)element.GetValue(AutoCloseTimeProperty);
11: }
12:
13: public static void SetAutoCloseTime(UIElement element, int value)
14: {
15: element.SetValue(AutoCloseTimeProperty, value);
16: }
17:
18: public static readonly DependencyProperty AutoCloseProperty = DependencyProperty.RegisterAttached("AutoClose", typeof(bool), typeof(AppBarExtensions),
19: new PropertyMetadata(DependencyProperty.UnsetValue,
20: (o, e) =>
21: {
22: var control = o as AppBar;
23:
24: appBar = control;
25: if (control != null)
26: {
27: if ((bool)e.NewValue)
28: {
29: control.Opened += AppBarOpened;
30: control.PointerEntered += control_PointerEntered;
31: control.PointerExited += control_PointerExited;
32: }
33: else
34: {
35: control.Opened -= AppBarOpened;
36: control.PointerEntered -= control_PointerEntered;
37: control.PointerExited -= control_PointerExited;
38: }
39: }
40: }));
41:
42: static void control_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
43: {
44: timer.Tick += timer_Tick;
45: timer.Start();
46: Elapsed = 1;
47: }
48:
49: static void control_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
50: {
51: timer.Stop();
52: timer.Tick -= timer_Tick;
53: Elapsed = 1;
54: }
55:
56: private static DispatcherTimer timer;
57:
58: private static int Elapsed = 1;
59:
60: static void AppBarOpened(object sender, object e)
61: {
62: timer = new DispatcherTimer();
63: timer.Interval = TimeSpan.FromSeconds(1);
64: timer.Tick += timer_Tick;
65: timer.Start();
66: }
67:
68: static void timer_Tick(object sender, object e)
69: {
70: if (Elapsed == GetAutoCloseTime((UIElement)appBar))
71: {
72:
73: Elapsed = 1;
74: appBar.IsOpen = false;
75: timer.Stop();
76: }
77: else
78: Elapsed++;
79: }
80: public static bool GetAutoClose(UIElement element)
81: {
82: return (bool)element.GetValue(AutoCloseProperty);
83: }
84: public static void SetAutoClose(UIElement element, bool value)
85: {
86: element.SetValue(AutoCloseProperty, value);
87: }
88: }
Del mismo modo que en el ejemplo del post anterior, vamos a ver como usarlo dentro de nuestro código:
1: xmlns:appbar="using:AppBarExtensions"
De esa manera podremos empezar a utilizarlo en nuestra AppBar:
1: <AppBar x:Name="appbar" appbar:AppBarExtensions.AutoClose="True" appbar:AppBarExtensions.AutoCloseTime="3" />
Espero que os resulte de utilidad.
Saludos!