Categoría: mis cosas

Posts de tipo personal o al menos que no son técnicos

  • [FB] 09 Dic, 17:39 – gracias a los amigos que les gusta elGuille.info en Facebook…

    Publicado en Facebook el December 09, 2012 at 05:39PM:

    gracias a todos los amigos que habéis aceptado mi invitación de hacer «me gusta» en mi página (técnica) en el feis…
    http://www.facebook.com/elGuille.info
    También sé que al que más al que menos el contenido le sonará a chino mandarín (elige un idioma que te suene a chino jeje), pero… bueno… que sí, que si no te interesa el contenido puedes darle al no me gusta… pero te estaré observando… ¡que lo sepas! 😉
    .
    Nos vemos.
    Guillermo

    #delfeis #ifttt #elguilleinfo

  • Error al usar inadecuadamente el XAML

    Pues eso… que no es un error que sepas por dónde "meterle mano", o al menos eso me pasó a mí cuando me ocurrió. Me estoy refiriendo a un "Break" que se toma el Debugger de Visual Studio 2012 concretamente cuando llega a la línea que contiene la siguiente cadena: DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION.

    El error ocurre porque hay código XAML que no es correcto.
    Y cuando digo que "no es correcto" no me refiero a que haya un fallo de que falte un cierre de elemento o algo así, me refiero a que, por ejemplo, estás usando código Xaml en el sitio inadecuado.

    Te explico uno de los casos en los que me ocurrió a mí.

    En la aplicación del Reloj para Windows 8 que estoy haciendo, y la que te he ido mostrando paso a paso, he creado unas cadenas para usar en el código XAML, concretamente para el ToolTip, etcétera.
    Esas cadenas las utilizo (o esa era la intención inicial) para no tener que andar repitiendo el mismo texto en varios sitios y así poder modificarlas una sola vez y se usará esa modificación en las distintas partes de la aplicación en las que la utilizo.
    Pues bien, las cadenas las tengo definidas con este código:

    <x:String x:Key="AboutClock">Un reloj…</x:String>

    Y para usarla lo hago de esta forma (en el código XAML, en este ejemplo de la página principal):

    ToolTipService.ToolTip="{StaticResource AboutClock}"

    El problema que tuve es que al usar esto último en la definición del estilo de un botón en el que quiero que se muestre un ToolTip me daba ese error.

    La definición de la cadena está en App.xaml y el estilo en StandardStyles.xaml y lo usaba de esta forma:

    <Setter Property="ToolTipService.ToolTip" Value="{StaticResource AboutClock}" />

     

    Pues bien, eso no funciona (a mí no me funciona) y lo tengo que definir directamente en el estilo (de esa forma al aplicar el estilo al botón también se asigna el ToolTip).

     

    Bueno, pues esto es todo… espero que te sea de utilidad.

     

    Nos vemos.
    Guillermo

  • Saber cuando la aplicación está en modo Snapped y actuar en consecuencia

    Pues eso… que en las aplicaciones de Windows 8 (Windows Store) la forma de verla puede ser de tres formas distintas: que ocupe toda la pantalla (el modo predeterminado), que ocupe una parte más pequeña en uno de los laterales (modo snapped o acoplada) o que ocupe la parte grande (filled o vista de relleno) cuando otra aplicación esté en modo snapped.

    Para aclarar estos conceptos, te muestro en la figura 1 cómo se vería una aplicación a vista completa o en modo acoplado (esta imagen está sacada de: Directrices para vistas acopladas y rellenas (aplicaciones de la Tienda Windows).

     

    snappd_01
    Figura 1. Una aplicación que va de pantalla completa a vista acoplada

     

    Cuando la aplicación está en modo "relleno" el tamaño es aceptablemente grande como para que tengamos que preocuparnos demasiado, pero cuando está en modo acoplado (snapped) ahí si que hay que tener en cuenta que el contenido puede que no sea el adecuado.

    Por ejemplo, nuestra aplicación de reloj se vería así:

    snappd_02
    Figura 2. La aplicación de reloj acoplada a la izquierda

     

    Por tanto, para que el texto se adapte cuando esté en modo acoplado (snapped) vamos a escribir unas pocas líneas en las que simplemente cambiaremos el tamaño de la fuente de los dos textos mostrados, de esa forma, al acoplar la aplicación se verá más o menos como vemos en la figura 3.

     

    snappd_03
    Figura 3. Al acoplar la ventana de nuestra aplicación el texto se adapta

     

    Nota:
    El cambio de color (y aparentemente de tamaño) del botón Stop es porque la figura 2 está capturada del proyecto de C# y la captura de la figura 3 es del proyecto de Visual Basic en el que he cambiado el color predeterminado de los iconos y demás con idea de que no sean grises, si no de ese color azul.

     

    Veamos el código, el cual está en MainPage_SizeChanged y lo único que haremos es "empequeñecer" el tamaño de las fuentes cuando esté en modo Snapped y volver a poner el tamaño inicial al mostrarse en cualquiera de las otras dos formas.

    VB:

    ' En el evento SizeChanged de la página principal comprobamos
    ' si estamos en modo de vista Snapped y adaptamos el tamaño de las fuentes
    Private Sub MainPage_SizeChanged(sender As Object, e As SizeChangedEventArgs) _
    Handles Me.SizeChanged If ApplicationView.Value = ApplicationViewState.Snapped Then txtHora.FontSize = 36 txtFecha.FontSize = 18 Else txtHora.FontSize = 72 txtFecha.FontSize = 36 End If End Sub

     

    C#:

    // En el evento SizeChanged de la página principal comprobamos
    // si estamos en modo de vista Snapped y adaptamos el tamaño de las fuentes
    private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (ApplicationView.Value == ApplicationViewState.Snapped)
        {
            txtHora.FontSize = 36;
            txtFecha.FontSize = 18;
        }
        else
        {
            txtHora.FontSize = 72;
            txtFecha.FontSize = 36;
        }
    }
    

     

    En el caso de VB no tienes que hacer nada especial con ese código, simplemente lo pegas en MainPage.vb y ya está, pero en C# debes agregar el evento a ese método, eso lo tendrás que hacer (por ejemplo) en el código de diseño de MainPage.xaml justo antes del cierre de la definición de la página (elemento Page):

    mc:Ignorable="d" SizeChanged="MainPage_SizeChanged">
    
    

     

    Lo que hacemos en ese método de evento es bien simple, comprobamos si el valor de la propiedad Value de la clase ApplicationView (que está definida en el espacio de nombres Windows.UI.ViewManagement) tiene un valor Snapped, de ser así reducimos el tamaño de las fuentes y en caso contrario asignamos los valores "normales".

    En la página (de MSDN) de la enumeración ApplicationViewState puedes ver los cuatro valores soportados por esa enumeración y la descripción de cada uno de ellos.

     

    Y esto es todo por hoy… dentro de poco más… ¿el qué? ya veremos… porque en teoría la aplicación ya está como en un principio yo quería que estuviera, así que… lo mismo te pongo un resumen completo y el código fuente… ya veremos.

    En cualquier caso, espero que te sea de utilidad todo esto que te he contado, tanto en esta ocasión como en las anteriores (abajo tienes todos los enlaces).

     

    Nos vemos.

    Guillermo

     

    Enlaces a los otros artículos de este "paso a paso":

    1. Usar un temporizador en las aplicaciones de Windows store (Visual Basic)
    2. Usar un temporizador en las aplicaciones de Windows store (C#)
    3. Pon una AppBar en tu aplicación de Windows Store
    4. Acceder a los recursos de una aplicación de Windows Store desde código (vb, c#, xaml)
    5. Actualizar el icono (tile) de una aplicación de Windows Store (cada minuto)
    6. Saber cuando la aplicación está en modo Snapped y actuar en consecuencia