Social Icons

viernes, 22 de abril de 2011

Stratex Systems está en la Nube

Acabo de recibir el link para unirme al programa beta de Office 365, lamentablemente otra vez no tengo tiempo hoy para probarlo como Dios manda, pero lo tendré el martes ojalá.

Os mantendré informados.

image

Un montón de licencias que asignar, un monton de software que probar...
Publicar un comentario

jueves, 21 de abril de 2011

Depurando aplicaciones de Windows Phone 7

Finalmente conseguí cargar y depurar mi aplicación en mi teléfono, pero no fue tan fácil...

Antes de nada encontré las instrucciones en esta página http://msdn.microsoft.com/en-us/library/ff941089(v=vs.92).aspx#BKMK_Register
 
Ahí dice que tienes que registrarte en el App Hub antes de poder hacer nada con tu móvil (y cuesta 100$) las palabras textuales son:

“You should register for membership as a Windows Phone developer before you begin creating applications because some development tasks, such as installing your application on a physical phone for testing, require App Hub membership”

Bien, esto significa que tienes que pagar 100$ antes de probar nada... paga antes, decide después. No puedo decir que me guste la filosofía.
 
Al final mi jefe se registró en el App Hub con su Live ID personal. Gran error. Sabíamos que podíamos tener hasta tres teléfonos de desarrollo, pero nadie nos dijo que todos ellos debían estar con la misma Live ID. Creíamos que se podrían invitar desarrolladores o algo así, pero no. Y no hay vuelta atrás no puedes cambiar tu suscripción a App Hub a otro Live ID... Tampoco estoy contento con esto.

¿Quieres saber cómo lo solucionamos? pues con una buena dosis de confianza por su parte.
 
Una vez que tienes registrada la Live ID al App Hub todo es fácil.

Conseguí desbloquear y registrar el teléfono usando la "Developer Phone Registration tool" http://msdn.microsoft.com/en-us/library/ff769508(VS.92).aspx… Bien, ¿y ahora que?

Pues ahora ya está todo preparado.
 
Si quieres ejecutar tu aplicación en tu móvil en cualquier momento tienes que desplegarla con la “Application Deployment” siguiendo las instrucciones de http://msdn.microsoft.com/en-us/library/gg588378(v=vs.92).aspx
 
O si prefieres puedes pulsar F5 en tu Visual Studio y poner la aplicación a correr en el teléfono y, finalmente... ¡Depurar!
Publicar un comentario

Creando un Expander en Silverlight para Windows Phone

Hace unos días estaba migrando una aplicación a WP7 y me di cuenta de que el control Expander no estaba... Me instalé entonces el Silverlight for Windows Phone Toolkit pero me di cuenta de que tampoco había Expander allí.

No se me ocurría ninguna manera nueva de representar la información sin expanders así que tuve que crear una versión simplificada para la ocasión. El control se compone de un Grid, un StackPanel y un TextBlock.

Está muy limitado y no se supone que con esto se vaya a poder sustituir al Expander de toda la vida, pero quizás pueda ayudar a alguien por ahí.

El código XAP es:
<Grid x:Name="LayoutRoot">
  <Border VerticalAlignment="Top" BorderBrush="#FF929EB0" BorderThickness="1" CornerRadius="2" Background="#FFE9E9E9" Margin="5,2">
            <Grid d:LayoutOverrides="Width">
    <Grid.RowDefinitions>
     <RowDefinition Height="Auto" MinHeight="20"/>
     <RowDefinition Height="Auto" MinHeight="5"/>
    </Grid.RowDefinitions>
    <TextBlock x:Name="Header" TextWrapping="Wrap" d:LayoutOverrides="Width" Foreground="#FF656565" Margin="15,2,0,0" VerticalAlignment="Top"/>
    <StackPanel x:Name="ChildrenPanel" VerticalAlignment="Top" d:LayoutOverrides="Width" Margin="0,2,0,0" Grid.Row="1"/>
   </Grid>
  </Border>
 </Grid>
El truco está en añadir un TextBlock en la cabecera del expander y suscribirse al evento MouseLeftButtonUp del TextBlock para controlar el plegado y desplegado. También he añadido una propiedad Folded para manejar el estado del expander desde afuera.

Si el expander está plegado añado los elementos al StackPanel, si está desplegado los quito. Suena muy simple, pero no era capaz de hacerlo funcionar. El StackPanel se quedaba del mismo tamaño, pero vacío, sin hijos... feísimo.

Después de pasar un rato intentando encoger el StackPanel a manija cambiando el parámetro Heigh encontré el problema.

Estaba intentando borrar todos los elementos del StackPanel a la vez con Children.Clear y eso estaba volviéndolo loco. La solución era borrar los elementos dentro de Children de uno en uno.

El código para la clase Expander es algo así:
public partial class Expander : UserControl
 {
        bool _Folded;
        public bool Folded
        {
            get { return _Folded; }
            set
            {
                _Folded = !value;
                ExpanderSwitch();
            }
        }
        List ChildrenList;


  public Expander()
  {
   // Required to initialize variables
   InitializeComponent();

            ChildrenList = new List();

            Header.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(UserActivity_MouseLeftButtonUp);
  }

        void UserActivity_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            ExpanderSwitch();
        }

        private void ExpanderSwitch()
        {
            if (Folded)
            {
                foreach (var child in ChildrenList)
                    ChildrenPanel.Children.Add(child);
            }
            else
            {
                if (ChildrenList.Count == 0)
                    foreach (var item in ChildrenPanel.Children)
                        ChildrenList.Add(item);

                while (ChildrenPanel.Children.Count > 0)
                    ChildrenPanel.Children.RemoveAt(0);
            }

            _Folded = !_Folded;
        }
 }
Y para usarlo solo tienes que añadir el control:
<Grid x:Name="LayoutRoot">
        <this:Expander x:Name="UserNews" />
    </Grid>
Y en el code behind puedes hacer algo como esto:
UserNews.Header.Text = GetHeader(News[0]);

            foreach (FrameworkNews news in News)
                UserNews.ChildrenPanel.Children.Add(new NewsDetail(news.Link, GetDetail(news), news.Where));

            UserNews.Folded = true;
Si tienes tiempo puedes añadir imágenes y animaciones al expander, y también un mejor "control del despliegue"... Yo no puedo dedicarle más tiempo, aunque me encantaría.... Una pena.
Publicar un comentario