Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Usando la caja de búsqueda en Windows 8.1

Publicada el 9 febrero, 20149 febrero, 2014
Twittear

Con la aparición de Windows 8 y su entorno de desarrollo llegaron – entre muchas otras cosas- los contratos. Por medio de los contratos es posible acceder a funcionalidad especializada como la configuración de la aplicación, funciones de compartir y búsqueda.

Con la llegada de Windows 8.1 el contrato de búsqueda ha quedado relevado por el control de búsqueda (SearchBox), con este control la simple implementación que el contrato de búsqueda ofrece ha sido aún más simple de realizar, para demostrar como se usa, vamos a hacer un ejercicio simple.

Crea una nueva solución, y coloca en este proyecto el control de búsqueda.

image

Agrega algunas propiedades y un manejador de eventos, tal como se muestra en el siguiente código XAML.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<earchBox Name="txtBusqueda" HorizontalAlignment="Left" Margin="26,44,0,0" VerticalAlignment="Top" Width="270" Tapped="txtBusqueda_Tapped"/>
</Grid>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <earchBox Name="txtBusqueda" HorizontalAlignment="Left" Margin="26,44,0,0" VerticalAlignment="Top" Width="270" Tapped="txtBusqueda_Tapped"/> </Grid>

Por el lado de C#, antes de poder continuar, necesitamos obviamente crear una lista que tenga los suficientes elementos como para hacer una búsqueda, yo creo que con diez será suficiente por ahora.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
 
listaPeliculas = new List&lt;Peliculas&gt;();
 
listaPeliculas.Add(new Peliculas { Titulo = "El rey león", Exhibicion = "1994", Informacion = "http://www.imdb.com/title/tt0110357/", Portada = "/Assets/ReyLeon.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Corazón de caballero", Exhibicion = "2001", Informacion = "http://www.imdb.com/title/tt0183790", Portada = "/Assets/Caballero.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Escucha tu destino", Exhibicion = "2007", Informacion = "http://www.imdb.com/title/tt0426931", Portada = "/Assets/August.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Los vengadores", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt0848228/", Portada = "/Assets/Vengadores.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "El caballero de la noche asciende", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt1345836/", Portada = "/Assets/Batman.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Los juegos del hambre", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1951264/", Portada = "/Assets/HungerGames.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Gigantes de acero", Exhibicion = "2011", Informacion = "http://www.imdb.com/title/tt0433035/", Portada = "/Assets/RealSteel.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Robin Hood", Exhibicion = "2010", Informacion = "http://www.imdb.com/title/tt0955308/", Portada = "/Assets/RobinHood.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Superman", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt0770828/", Portada = "/Assets/Superman.jpg" });
listaPeliculas.Add(new Peliculas { Titulo = "Thor", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1981115/", Portada = "/Assets/ThorDark.jpg" });
}

protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); listaPeliculas = new List&lt;Peliculas&gt;(); listaPeliculas.Add(new Peliculas { Titulo = "El rey león", Exhibicion = "1994", Informacion = "http://www.imdb.com/title/tt0110357/", Portada = "/Assets/ReyLeon.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Corazón de caballero", Exhibicion = "2001", Informacion = "http://www.imdb.com/title/tt0183790", Portada = "/Assets/Caballero.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Escucha tu destino", Exhibicion = "2007", Informacion = "http://www.imdb.com/title/tt0426931", Portada = "/Assets/August.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Los vengadores", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt0848228/", Portada = "/Assets/Vengadores.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "El caballero de la noche asciende", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt1345836/", Portada = "/Assets/Batman.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Los juegos del hambre", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1951264/", Portada = "/Assets/HungerGames.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Gigantes de acero", Exhibicion = "2011", Informacion = "http://www.imdb.com/title/tt0433035/", Portada = "/Assets/RealSteel.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Robin Hood", Exhibicion = "2010", Informacion = "http://www.imdb.com/title/tt0955308/", Portada = "/Assets/RobinHood.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Superman", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt0770828/", Portada = "/Assets/Superman.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Thor", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1981115/", Portada = "/Assets/ThorDark.jpg" }); }

Ahora con el evento Tapped de la caja de búsqueda vamos a obtener la cadena d búsqueda y realizar una consulta a la lista en base a ella.

private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e)
{
string tituloBuscado = txtBusqueda.QueryText;
 
List&lt;Peliculas&gt; peliculasSeleccionadas = (from p in listaPeliculas
where p.Titulo == tituloBuscado
select p).ToList();
}

private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e) { string tituloBuscado = txtBusqueda.QueryText; List&lt;Peliculas&gt; peliculasSeleccionadas = (from p in listaPeliculas where p.Titulo == tituloBuscado select p).ToList(); }

Ya tenemos la posibilidad de obtener los resultados, ahora, gracias a las enormes ventajas que LINQ nos ofrece debes de considerar al menos dos escenarios, uno es que el usuario probablemente escriba el título con minúsculas y nosotros no lo tengamos así, el segundo es que el usuario no escriba el título completo. En cualquiera de los dos casos, debemos trabajar por seguir obteniendo el resultado.

private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e)
{
string tituloBuscado = txtBusqueda.QueryText;
 
List&lt;Peliculas&gt; peliculasSeleccionadas = (from p in listaPeliculas
where p.Titulo.ToLower() == tituloBuscado.ToLower() || p.Titulo.Contains(tituloBuscado)
select p).ToList();
}

private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e) { string tituloBuscado = txtBusqueda.QueryText; List&lt;Peliculas&gt; peliculasSeleccionadas = (from p in listaPeliculas where p.Titulo.ToLower() == tituloBuscado.ToLower() || p.Titulo.Contains(tituloBuscado) select p).ToList(); }

Con la lista obtenida y con este escenario, ahora busca dos casos posibles. Escribe “superman” (todo en minúsculas).

image

Debes poder obtener un resultado.

image

Ahora, la razón de que sea una lista la que espera los resultados es porque seguramente una palabra podría ser encontrada en dos o más elementos. Escribe “caballero” para obtener este caso.

image

El resultado será el siguiente.

image

Ya tienes una colección, ya tienes tu consulta y por último los resultados obtenidos. ¿Mucho más simple que el contrato de búsqueda no?

Si quieres darle un vistazo al ejercicio, puedes descargarlo aquí.

1 comentario en «Usando la caja de búsqueda en Windows 8.1»

  1. Marcos dice:
    9 febrero, 2014 a las 6:34 pm

    Muy bueno Amin, de verdad que creí que era más difícil de implementar :/ pero con tu tutorial vi que no.
    Gracias

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress