<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>JAMolina.com</title>
	
	<link>http://jamolina.com</link>
	<description>Blog de Arturo Molina sobre .NET, Silverlight y Programación en general</description>
	<lastBuildDate>Wed, 23 Mar 2011 18:03:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Jamolinacom" /><feedburner:info uri="jamolinacom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>DataGrid, ColumnSeries y un toque de MVVM</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/mdSqZ4z6TMQ/</link>
		<comments>http://jamolina.com/2011/03/datagrid-columnseries-y-un-toque-de-mvvm/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 19:28:04 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Binding]]></category>
		<category><![CDATA[Chart]]></category>
		<category><![CDATA[ColumnSeries]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Silverlight Toolkit]]></category>

		<guid isPermaLink="false">http://jamolina.com/2011/03/datagrid-columnseries-y-un-toque-de-mvvm/</guid>
		<description><![CDATA[Recibí una pregunta pregunta en un post que había escrito previamente. La pregunta era como se puede cambiar una gráfica a la par con los datos de un DataGrid. La respuesta es ¡Con DataBinding! Muchas gracias. Ok ok, la explicación larga. Primero vamos a hacer un modelo para datos de prueba: using System.ComponentModel; namespace SilverlightApplication3 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jamolina.com/wp-content/uploads/2011/03/image.png" rel="lightbox"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2011/03/image_thumb.png" width="644" height="454" /></a></p>
<p><span id="more-619"></span></p>
<p>Recibí una pregunta pregunta en un <a href="http://blogs.ligasilverlight.com/2009/12/ocultando-las-lneas-del-control-chart/comment-page-1/#comment-7056" target="_blank">post</a> que había escrito previamente. La pregunta era como se puede cambiar una gráfica a la par con los datos de un DataGrid. La respuesta es ¡Con DataBinding!</p>
<p>Muchas gracias.</p>
<p>Ok ok, la explicación larga. Primero vamos a hacer un modelo para datos de prueba:</p>
<pre class="brush: csharp;">using System.ComponentModel;

namespace SilverlightApplication3
{
    public class SampleData : INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                NotifyPropertyChanged(&quot;Name&quot;);
            }
        }

        private double _value;
        public double Value
        {
            get { return _value; }
            set
            {
                _value = value;
                NotifyPropertyChanged(&quot;Value&quot;);
            }
        }

        public SampleData() {  }

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}</pre>
<p>&#160;</p>
<p>Este modelo cuenta con dos propiedades (Name y Value) e implementa INotifyPropertyChanged para poder manejar el Binding de forma correcta.</p>
<p>Ahora creamos el ViewModel. En una aplicación real deberías obtener dichos valores desde un webservice en tu servidor, pero para efectos prácticos, aquí inicializo una lista de objetos SampleData (nuestro modelo) en el constructor del ViewModel.</p>
<pre class="brush: csharp;">using System.Collections.Generic;

namespace SilverlightApplication3
{
    public class ViewModel
    {
        public string Title { get; set; }
        public List&lt;SampleData&gt; Samples { get; set; } 

        public ViewModel()
        {
            Title = &quot;Probando graficas&quot;;
            Samples = new List&lt;SampleData&gt;();
            Samples.Add(new SampleData() { Name = &quot;Nombre 1&quot;, Value = 1 });
            Samples.Add(new SampleData() { Name = &quot;Nombre 2&quot;, Value = 4 });
            Samples.Add(new SampleData() { Name = &quot;Nombre 3&quot;, Value = 3 });
            Samples.Add(new SampleData() { Name = &quot;Nombre 4&quot;, Value = 2 });
            Samples.Add(new SampleData() { Name = &quot;Nombre 5&quot;, Value = 5 });
        }
    }
}</pre>
<p>&#160;</p>
<p>Finalmente creamos nuestra vista en XAML:</p>
<pre class="brush: xml; highlight: [13,17,30,40,55,57];">&lt;UserControl x:Class=&quot;SilverlightApplication3.MainPage&quot;
             xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
             xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
             xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
             xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
             mc:Ignorable=&quot;d&quot;
             d:DesignHeight=&quot;390&quot;
             d:DesignWidth=&quot;638&quot;
             xmlns:sdk=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk&quot;
             xmlns:me=&quot;clr-namespace:SilverlightApplication3&quot;
             xmlns:toolkit=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit&quot;&gt;
    &lt;UserControl.Resources&gt;
        &lt;me:ViewModel x:Key=&quot;model&quot; /&gt;
    &lt;/UserControl.Resources&gt;
    &lt;Grid x:Name=&quot;LayoutRoot&quot;
          Background=&quot;White&quot;
          DataContext=&quot;{Binding Source={StaticResource model}}&quot;&gt;
        &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition Width=&quot;237&quot; /&gt;
            &lt;ColumnDefinition Width=&quot;*&quot; /&gt;
        &lt;/Grid.ColumnDefinitions&gt;
        &lt;StackPanel&gt;
            &lt;TextBlock Text=&quot;{Binding Title}&quot;
                       FontWeight=&quot;Bold&quot;
                       Margin=&quot;0,10&quot;
                       HorizontalAlignment=&quot;Center&quot; /&gt;
            &lt;sdk:DataGrid AutoGenerateColumns=&quot;False&quot;
                          x:Name=&quot;dataGrid1&quot;
                          VerticalAlignment=&quot;Top&quot;
                          ItemsSource=&quot;{Binding Samples, Mode=TwoWay}&quot;
                          Margin=&quot;10,0&quot;&gt;
                &lt;sdk:DataGrid.Columns&gt;
                    &lt;sdk:DataGridTextColumn Header=&quot;Nombre&quot;
                                            Binding=&quot;{Binding Name}&quot; /&gt;
                    &lt;sdk:DataGridTemplateColumn Header=&quot;Valor&quot;
                                                Width=&quot;150&quot;&gt;
                        &lt;sdk:DataGridTemplateColumn.CellEditingTemplate&gt;
                            &lt;DataTemplate&gt;
                                &lt;StackPanel Orientation=&quot;Horizontal&quot;&gt;
                                    &lt;Slider Value=&quot;{Binding Value, Mode=TwoWay}&quot;
                                            Maximum=&quot;5&quot;
                                            Minimum=&quot;0&quot;
                                            Width=&quot;100&quot; /&gt;
                                    &lt;TextBlock Text=&quot;{Binding Value, StringFormat=\{0:F4\} }&quot; /&gt;
                                &lt;/StackPanel&gt;
                            &lt;/DataTemplate&gt;
                        &lt;/sdk:DataGridTemplateColumn.CellEditingTemplate&gt;
                    &lt;/sdk:DataGridTemplateColumn&gt;
                &lt;/sdk:DataGrid.Columns&gt;
            &lt;/sdk:DataGrid&gt;
        &lt;/StackPanel&gt;
        &lt;Grid Grid.Column=&quot;1&quot;&gt;
            &lt;toolkit:Chart Margin=&quot;10&quot;&gt;
                &lt;toolkit:ColumnSeries x:Name=&quot;columnSeries1&quot;
                                      ItemsSource=&quot;{Binding Samples, Mode=TwoWay}&quot;
                                      IndependentValuePath=&quot;Name&quot;
                                      DependentValuePath=&quot;Value&quot;&gt;
                    &lt;toolkit:ColumnSeries.DependentRangeAxis&gt;
                        &lt;toolkit:LinearAxis Orientation=&quot;Y&quot;
                                            Minimum=&quot;0&quot;
                                            Maximum=&quot;5.5&quot; /&gt;
                    &lt;/toolkit:ColumnSeries.DependentRangeAxis&gt;
                &lt;/toolkit:ColumnSeries&gt;
            &lt;/toolkit:Chart&gt;
        &lt;/Grid&gt;
    &lt;/Grid&gt;
&lt;/UserControl&gt;</pre>
<p>&#160;</p>
<p>En la línea 13 creamos una instancia de nuestro ViewModel y la agregamos a nuestros recursos locales. Después, en la línea 17 asignamos dicho recurso al DataContext de nuestro LayoutRoot (en este caso el Grid que contiene todos los elementos de la vista). En la línea 30 definimos la propiedad Samples de nuestro ViewModel como la fuente de datos del DataGrid. En la línea 40 definimos el binding a la propiedad Value con un slider para modificar los datos fácilmente. Las líneas 55 y 57 se encargan de hacer lo mismo para la gráfica de barras.</p>
<p>Nótese como los bindings se definien con el Mode=TwoWay para actualizar el ViewModel “de ida y vuelta”, es decir, que los cambios en la vista se reflejan en el ViewModel y viceversa.</p>
<p>Puedes ver el ejemplo corriendo <a href="http://demos.jamolina.com/DataGridColumnSeriesMVVM" target="_blank">aquí</a>. Y puedes descargar el código <a href="http://source.jamolina.com/DataGridColumnSeriesMVVM.zip" target="_blank">aquí</a>.</p>
<p><strong>UPDATE:</strong> De pura casualidad <strike>encontré</strike> mi compañera Araceli Medina encontró un bug en el Silverlight Toolkit mientras jugaba con el demo. Estaba jugando con mover sliders y cambiar el tamaño de la ventana cuando noté que esto pasaba:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2011/03/image1.png" rel="lightbox"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2011/03/image_thumb1.png" width="604" height="324" /></a></p>
<p>El borde inferior de los rectangulos no se quedaba en la parte de abajo de la gráfica. No estoy seguro a qué se deba esto pero si se vuelve a cambiar el tamaño de la ventana el problema se corrije. El bug fue dado de alta en <a href="http://silverlight.codeplex.com/workitem/8535" target="_blank">codeplex</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2011/03/datagrid-columnseries-y-un-toque-de-mvvm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jamolina.com/2011/03/datagrid-columnseries-y-un-toque-de-mvvm/</feedburner:origLink></item>
		<item>
		<title>Custom Action Filters en ASP.NET MVC</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/GsQ7_dwBnuc/</link>
		<comments>http://jamolina.com/2011/03/custom-action-filters-en-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 23:50:40 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[ActionFilters]]></category>

		<guid isPermaLink="false">http://jamolina.com/2011/03/custom-action-filters-en-asp-net-mvc/</guid>
		<description><![CDATA[Estaba siguiendo el tutorial de MVC Music Store V2.0 hecho por Jon Galloway (muy recomendable para meterse a ASP.NET MVC 3 con Razor) cuando noté una constante repetición de código necesario para un par de dropdowns en varias vistas del StoreManagerController: ViewBag.Genres = storeDB.Genres.OrderBy(g =&#62; g.Name).ToList(); ViewBag.Artists = storeDB.Artists.OrderBy(a =&#62; a.Name).ToList(); &#160; Si bien son [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jamolina.com/wp-content/uploads/2011/03/2011.03.16-Custom-Action-Filters.png" rel="lightbox"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="2011.03.16-Custom-Action-Filters" border="0" alt="2011.03.16-Custom-Action-Filters" src="http://jamolina.com/wp-content/uploads/2011/03/2011.03.16-Custom-Action-Filters_thumb.png" width="504" height="354" /></a></p>
<p><span id="more-614"></span></p>
<p>Estaba siguiendo el tutorial de <a href="http://mvcmusicstore.codeplex.com/" target="_blank">MVC Music Store V2.0</a> hecho por <a href="http://weblogs.asp.net/jgalloway/" target="_blank">Jon Galloway</a> (muy recomendable para meterse a ASP.NET MVC 3 con Razor) cuando noté una constante repetición de código necesario para un par de dropdowns en varias vistas del <a href="http://mvcmusicstore.codeplex.com/SourceControl/changeset/view/b783a1bfa56c#MvcMusicStore%2fControllers%2fStoreManagerController.cs" target="_blank">StoreManagerController</a>:</p>
<pre class="brush: csharp;">ViewBag.Genres = storeDB.Genres.OrderBy(g =&gt; g.Name).ToList();
ViewBag.Artists = storeDB.Artists.OrderBy(a =&gt; a.Name).ToList();</pre>
<p>&#160;</p>
<p>Si bien son sólo dos lineas de código, me parece muy innecesaria la repetición de este en 4 ActionMethods. Así que se me ocurrió usar un Custom Action Filter para agregar dichas propiedades al ViewBag con un simple atributo, aquí la implementación:</p>
<pre class="brush: csharp;">using System.Linq;
using System.Web.Mvc;
using MvcMusicStore.Models;

namespace MvcMusicStore
{
    public class IncludeArtistsGenreAttribute : ActionFilterAttribute
    {
        public MusicStoreEntities db = new MusicStoreEntities();

        public override void OnActionExecuting(
            ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            filterContext.Controller.ViewBag.Genres =
                db.Genres.OrderBy(g =&gt; g.Name).ToList();
            filterContext.Controller.ViewBag.Artists =
                db.Artists.OrderBy(a =&gt; a.Name).ToList();
        }
    }
}</pre>
<p>Lo primero que necesitamos es heredar de la clase <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.actionfilterattribute.aspx" target="_blank">ActionFilterAttribute</a> para poder hacer override de uno de los siguientes métodos virtuales:</p>
<ul>
<li><strong>OnActionExecuting.</strong> El cuál se ejecuta antes del Action method correspondiente. </li>
<li><strong>OnActionExecuted.</strong> Se ejecuta después de que el Action method termina. </li>
<li><strong>OnResultExecuting.</strong> Se ejecuta justo antes de regresar el ActionResult del método. </li>
<li><strong>OnResultExecuted.</strong> Se ejecuta una vez que el ActionResult ha sido regresado. </li>
</ul>
<p>En este caso el único método que no nos sirve es el <em>OnResultExecuted</em> ya que es demasiado tarde para agregar propiedades al ViewBag. Una vez implementado nuestro atributo, simplemente decoramos los Action methods en donde necesitamos estas propiedades (los que tienen vistas con los dropdown de Géneros y Artistas) de esta manera:</p>
<pre class="brush: csharp;">//
// GET: /StoreManager/Create

[IncludeArtistsGenre]
public ActionResult Create()
{
    //ViewBag.Genres = db.Genres.OrderBy(g =&gt; g.Name).ToList();
    //ViewBag.Artists = db.Artists.OrderBy(a =&gt; a.Name).ToList();

    var album = new Album();

    return View(album);
} 

//
// POST: /StoreManager/Create

[HttpPost]
[IncludeArtistsGenre]
public ActionResult Create(Album album)
{
    if (ModelState.IsValid)
    {
        db.Albums.Add(album);
        db.SaveChanges();
        return RedirectToAction(&quot;Index&quot;);
    }

    //ViewBag.Genres = db.Genres.OrderBy(g =&gt; g.Name).ToList();
    //ViewBag.Artists = db.Artists.OrderBy(a =&gt; a.Name).ToList();

    return View(album);
}

//
// GET: /StoreManager/Edit/5
[IncludeArtistsGenre]
public ActionResult Edit(int id)
{
    //ViewBag.Genres = db.Genres.OrderBy(g =&gt; g.Name).ToList();
    //ViewBag.Artists = db.Artists.OrderBy(a =&gt; a.Name).ToList();

    var album = db.Albums.Single(a =&gt; a.AlbumId == id);
    return View(album);
}

//
// POST: /StoreManager/Edit/5

[HttpPost]
[IncludeArtistsGenre]
public ActionResult Edit(int id, FormCollection collection)
{
    var album = db.Albums.Find(id);
    if (TryUpdateModel(album))
    {
        db.SaveChanges();
        return RedirectToAction(&quot;Index&quot;);
    }
    else
    {
        //ViewBag.Genres = db.Genres.OrderBy(g =&gt; g.Name).ToList();
        //ViewBag.Artists = db.Artists.OrderBy(a =&gt; a.Name).ToList();

        return View(album);
    }
}</pre>
<p>&#160;</p>
<p>Nótese que dejé las lineas repetitivas comentadas por motivos ilustrativos pero en realidad habría que borrarlas por completo <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://jamolina.com/wp-content/uploads/2011/03/wlEmoticon-smile.png" />.</p>
<p>MVC nos incluye varios Action Filters que pueden ser utilizados para cosas como autenticación/autorización, manejo de errores, manejo de cache, etc. Para más información puedes checar el artículo correspondiente en <a href="http://msdn.microsoft.com/en-us/library/dd410209.aspx" target="_blank">MSDN</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2011/03/custom-action-filters-en-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2011/03/custom-action-filters-en-asp-net-mvc/</feedburner:origLink></item>
		<item>
		<title>Mitos sobre Silverlight y HTML5</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/2ILBW_7rLlI/</link>
		<comments>http://jamolina.com/2010/11/mitos-sobre-silverlight-y-html5/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 21:50:33 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/11/mitos-sobre-silverlight-y-html5/</guid>
		<description><![CDATA[Con todos los eventos descritos previamente en otro post, ha surgido una ola de artículos contra y a favor de Silverlight y HTML5. El objetivo de este post es exponer otros puntos de vista que quizá se hayan perdido por estar a la defensiva. Rendimiento Uno de los puntos que mucha gente Pro-Silverlight sacó a [...]]]></description>
			<content:encoded><![CDATA[<p>Con todos los eventos descritos previamente en <a href="http://jamolina.com/index.php/2010/11/html5-vs-silverlight/" target="_blank">otro post</a>, ha surgido una ola de artículos contra y a favor de Silverlight y HTML5. El objetivo de este post es exponer otros puntos de vista que quizá se hayan perdido por estar a la defensiva.</p>
<p><span id="more-599"></span></p>
<h3>Rendimiento</h3>
<p>Uno de los puntos que mucha gente Pro-Silverlight sacó a relucir es el rendimiento. Esta punto es debatible. Es cierto que hoy una aplicación que utilice la tarjeta de video será mucho más rápida en Silverlight gracias al uso de la aceleración por hardware (actualmente IE9 es el único navegador con soporte para aceleración por hardware). Pero no debes asumir que usar Silverlight es más rápido en todos los casos. Movimientos, fades, rotación y distintos tipos de animaciones serán mejor provistos usando javascript, debido a que el tiempo de carga de un aplicación de Silverlight es mucho mayor que un script de Javascript (aún cuando la más reciente actualización de SL mejoró esto notablemente). Es mejor analizar bien en qué punto el tiempo de carga hace que valga la pena usar SL sobre JS.</p>
<h3>Escribe una vez, corre en donde sea</h3>
<p>Ninguna de tecnologías te permite hacer esto. Esta frase la he escuchado desde los inicios de Java, pero ninguna tecnología ha podido llegar a este punto. Y para ser sinceros, es una pérdida de tiempo intentar algo así. Cada dispositivo que usamos tiene sus propias características que influyen sobre la forma en que interactuamos con él. Si bien es cierto que una buena arquitectura te puede llevar a compartir las mismas librerías principales, no esperes escribir una aplicación y mandarla a donde sea sin cambiar nada. Eso de que HTML5 requiere escribir un código para cada navegador no es cierto. Herramientas como <a href="http://jquery.com" target="_blank">jQuery</a> te permiten extraer las diferencias y concentrarte en escribir tu aplicación y delegar las diferencias de navegadores a alguien más. Además, les tengo una noticia, con SL también hay casos en los tienes que escribir lógica para ver si estas en Windows, Windows Phone, Mac o Linux (en especial Linux ya que la implementación del plugin, <a href="http://www.mono-project.com/Main_Page" target="_blank">Mono</a>, está apenas a la par con la versión 2.0 de SL).</p>
<h3>HTML5 no está listo</h3>
<p>¡Tampoco CSS3 y llevamos años usándolo! HTML5 no estará oficialmente listo hasta dentro de muchos años. Sin embargo ya se está usando desde hace tiempo y <a href="http://www.engadget.com/2010/11/02/w3c-tests-html5-browser-compatibility-crowns-ie9-the-champ/" target="_blank">la implementación en los navegadores continúa mejorando</a>.</p>
<h3>No hay herramientas para desarrollar en HTML5</h3>
<p><a href="http://blog.reybango.com/2010/09/21/how-to-create-html5-website-and-page-templates-for-visual-studio-2010/" target="_blank">Aquí</a> tienes. Por otro lado, no tengas miedo de salir de Visual Studio de vez en cuando.</p>
<h3>Silverlight es mejor para aplicaciones, HTML para sitios</h3>
<p>HTML puede generar impresionantes aplicaciones (véase <a href="http://agilezen.com/" target="_blank">AgileZen</a>)</p>
<h3>Silverlight corre en tres pantallas</h3>
<p>Silverlight corre en ciertos navegadores, como aplicación nativa en Windows y Mac OS y como aplicación Nativa en un teléfono (WP7). Hasta ahí llega hoy. No corre completamente en Linux (pero ahí va), no corre en teles (aún) y no corre en el navegador de ningún teléfono.</p>
<h3>Silverlight (y Flash) morirá(n) gracias al Tag de video de HTML5</h3>
<p>Nada podría ser más falso. Silverlight proveé muchos casos de uso que no están ni siquiera planeados para dicho tag. El más mencionado es DRM, pero existen muchísimas experiencias que aún no se pueden lograr con HTML5.&#160; Si bien la mayoría de las aplicaciones de SL que existen no desarrollan todo su potencial, exiten empresas con <a href="http://www.vertigo.com/" target="_blank">Vertigo</a> que han sabido explotar todo el poder de la plataforma creando experiencias asombrosas como <a href="http://memorabilia.hardrock.com/" target="_blank">Hard Rock Memorabilia</a>, <a href="http://www.playboyarchive.com/" target="_blank">Playboy Catalog</a>, las <a href="http://www.vertigo.com/Olympics.aspx" target="_blank">Olimpiadas de Invierno 2010</a> entre muchas otras.</p>
<h3>Silverlight no fue mencionado en el keynote del PDC, por lo tanto morirá</h3>
<p>Tampoco hablaron sobre el café en el keynote y dudo que <a href="http://www.starbucks.com/" target="_blank">Starbucks</a> vaya a cerrar pronto. Además, si no lo notaron, hicierton un demo de Silverlight para WP7 y hubieron muchísimas sesiones de SL después del keynote.</p>
<p>Y como estos existen muchos mitos más. Cómo siempre, es mejor experimentar de primera mano antes de tomar decisiones.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/11/mitos-sobre-silverlight-y-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/11/mitos-sobre-silverlight-y-html5/</feedburner:origLink></item>
		<item>
		<title>HTML5 vs Silverlight</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/AOXPOaa7zcI/</link>
		<comments>http://jamolina.com/2010/11/html5-vs-silverlight/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 17:43:55 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/11/html5-vs-silverlight/</guid>
		<description><![CDATA[Nuestras vidas están llenas de opciones. Todos los días decides levantarte o quedarte en la cama 5, 10, 15, 60 minutos de más. Todos los días decides qué desayunar, qué ruta tomar, qué comer, a dónde salir, qué tomar, por quién votar, en qué dios creer, qué preferencias tener y un largo etcétera. Cómo en [...]]]></description>
			<content:encoded><![CDATA[<p>Nuestras vidas están llenas de opciones. Todos los días decides levantarte o quedarte en la cama 5, 10, 15, 60 minutos de más. Todos los días decides qué desayunar, qué ruta tomar, qué comer, a dónde salir, qué tomar, por quién votar, en qué dios creer, qué preferencias tener y un largo etcétera. Cómo en todo, cada quien tiene sus preferencias y en muchos casos cree que esa preferencia es mejor que otras. En el caso de la programación o desarrollo, uno escoge su lenguaje y en muchos casos le es fiel hasta la muerte.</p>
<p><span id="more-598"></span></p>
<p>En mi caso particular, he pasado por Basic, Pascal, C, C++, FoxPro, VB.NET, C#, HTML, XHTML, Javascript, Silverlight, Flash, Java, PHP etc, etc, etc. En los últimos años me he adentrado en C# y toda la tecnología .NET de Microsoft. Me gusta C#, quizá por mi forma de ser, muy ordenado y el hecho de que me gusta que las cosas hagan sentido y sean cuadradas. Me encantaba la forma en que ASP.NET con sus extensiones de AJAX te permitía hacer páginas que parecían hechas con Javascript pero todo desde código manejado. Hoy en día, detesto este enfoque. El mundo cambió y yo también.</p>
<p>Hace 2 años me adentré al mundo de Silverlight gracias a mi amigo <a href="http://rdiazconcha.com" target="_blank">Rodrigo Díaz</a> y me encantó la idea de poder programar una aplicación web como si fuera de escritorio. Conforme pasó el tiempo, fueron sacando mejoras como aplicaciones fueras del navegador que ¡Funcionaban incluso en las Mac! El poder del binding y las plantillas que comenzaron a sacar hacía que programar con Silverlight fuera una experiencia fácil y rápida. Cuando conocí MVVM simplemente quedé enganchado. Soy fan de las arquitecturas y MVVM es simplemente genial con Silverlight.</p>
<p>Hace 1 año comencé a adentrarme al mundo de ASP.NET MVC y jQuery. MVC fue para mí, como dicen por ahí, una bocanada de aire fresco. Estaba harto de ASP.NET y su lentitud y falta de compatibilidad con estándares. MVC es rápido, ligero, limpio y genera HTML compatible con cualquier navegador. Siempre le había tenido miedo a Javascript, pero jQuery lo hizo tan fácil que ahora me gusta tanto que me estoy metiendo más a fondo en Javascript como lenguaje y me asombro de todo lo que puede hacer. Con las nuevas características que se están introduciendo con HTML5, existe un gran potencial para hacer aplicaciones Web sin necesidad de instalar un plugin adicional.</p>
<p>Hace unos meses Brad Becker del equipo de Silverlight escribió un interesante artículo sobre el <a href="http://team.silverlight.net/announcement/the-future-of-silverlight/" target="_blank">futuro de Silverlight</a>. En dicho artículo destaca los diferentes puntos en los que Silverlight complementa HTML5. Esto me parece muy importante. Desde el principio, la gente dijo que Silverlight llegó a competir con Flash (incluso yo llegué a pensarlo) y ahora dicen que compite con HTML5. Nada podría ser más falso (bueno, con Flash si tiene algo de verdad). Si bien existen puntos que las 3 tecnologías tocan, cada una tiene sus características que las hacen únicas. Además, aún cuando no compiten del todo, el simple hecho de que existan hace que cada tecnología genere más innovaciones para no quedarse atrás.</p>
<p>La semana pasada, Mary-Jo Foley, escritora de la columna “<a href="http://www.zdnet.com/blog/microsoft" target="_blank">All about Microsoft</a>” para ZDNET escribió un artículo llamado “<a href="http://www.zdnet.com/blog/microsoft/microsoft-our-strategy-with-silverlight-has-shifted/7834?tag=mantle_skin;content" target="_blank">Microsoft: Our strategy with Silverlight has shifted</a>”, en el que entrevista a Bob Muglia, Presidente de la división de Servidores y Herramientas de Negocios de Microsoft. Este artículo generó polémica e ira entre programadores y tomadores de decisiones. En él Muglia menciona que su enfoque con Silverlight ha cambiado y que HTML es la verdadera solución multiplataforma. Los medios y Twitter estallaron con suposiciones de que Silverlight estaba muerto. Todo esto se dejó crecer durante el fin de semana y el lunes el mismo Muglia publicó un comunicado confirmando su <a href="http://team.silverlight.net/announcement/pdc-and-silverlight/" target="_blank">compromiso con Silverlight</a>. Incluso, la misma <a href="http://twitter.com/#!/maryjofoley/status/29318090218" target="_blank">Foley comentó</a> como todo había sido malinterpretado.</p>
<p>En mi opinión, Muglia no dijo nada que no fuera verdad. Silverlight sigue siendo una excelente herramienta para desarrollo para web, cliente, Windows Phone y próximamente TVs (lo cual puede ser algo muy grande, en especial compitiendo con algo como Google TV). HTML es la verdadera solución multiplataforma. Funciona en todos los sistemas operativos, todos los navegadores (obvio) y en todos los teléfonos con navegador (muchos que ni siquiera son smartphones). Mucha gente defiende una herramienta o la otra a capa y espada, pero como dije al principio, son sólo opciones, ninguna es mejor que otra en todos los casos. Uno como desarrollador debe analizar cada situación y usar lo que mejor se aplique. No vas a poner a hacer una base de datos en HTML ni vas a ponerte a hacer sistemas de soporte de vida en Silverlight. Como desarrolladores tenemos que saber muchos lenguajes, y si te quieres encerrar en uno sólo creo que te estás perdiendo de muchas cosas y no estás alcanzando todo tu potencial y el de la tecnología misma.</p>
<p>Existen muchos mitos sobre Silverlight y HTML5 (que dejaré para otro post), lo mejor es que tu mismo pruebas de primera mano cómo son ambas herramientas (o muchas otras) antes de formar tu opinión sobre ellas. Si no has usado una y sólo te basas en comentarios de otras personas, mejor no critiques sobre lo que no conoces. Esa mentalidad de “mi lenguaje es mejor que el tuyo” sólo estorba. Conoce tu herramienta, echa un vistazo a otras herramientas y usa la que más te guste y/o mejor se acomode a tus necesidades.</p>
<p>A mi me gusta desarrollar para la web. Si Silverlight desaparece en 2 o 3 años, ni modo. Si HTML5 no está listo antes de que se acabe el mundo, pues que así sea. La vida sigue y la tecnología avanza muy rápido como para andar discutiendo quien tiene la mejor herramienta.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/11/html5-vs-silverlight/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/11/html5-vs-silverlight/</feedburner:origLink></item>
		<item>
		<title>Cambia de fecha evento del Windows Phone 7</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/Jfahv63Q-8M/</link>
		<comments>http://jamolina.com/2010/09/cambia-de-fecha-evento-del-windows-phone-7/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 15:50:40 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[WP7]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/09/cambia-de-fecha-evento-del-windows-phone-7/</guid>
		<description><![CDATA[Debido a que otro evento de la misma índole se llevará a cabo en la misma fecha por parte de Microsoft, nuestro evento se moverá para un día después, misma hora, mismo lugar. Mas información en el post original.]]></description>
			<content:encoded><![CDATA[<p>Debido a que <a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032459769&amp;EventCategory=4&amp;culture=es-MX&amp;CountryCode=MX">otro evento de la misma</a> índole se llevará a cabo en la misma fecha por parte de Microsoft, nuestro evento se moverá para un día después, misma hora, mismo lugar.</p>
<p><span id="more-596"></span></p>
<p>Mas información en el <a href="http://jamolina.com/index.php/2010/09/evento-conoce-windows-phone-7/">post original</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/09/cambia-de-fecha-evento-del-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/09/cambia-de-fecha-evento-del-windows-phone-7/</feedburner:origLink></item>
		<item>
		<title>Arcade Fire y el poder de html5</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/7UedZ55rTSk/</link>
		<comments>http://jamolina.com/2010/09/arcade-fire-y-el-poder-de-html5/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 04:04:46 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[arcade fire]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/09/arcade-fire-y-el-poder-de-html5/</guid>
		<description><![CDATA[Este grupo canadiense ya me había sorprendido antes con su video “Neon Bible”. Esta es una animación hecha en flash con la cual puedes interactuar para crear tu propia versión del video. La idea se me hizo genial. Pero esta vez, Arcade Fire y Google van mucho más alla, haciendo el video de la canción [...]]]></description>
			<content:encoded><![CDATA[<p>Este grupo canadiense ya me había sorprendido antes con su video “<a href="http://www.beonlineb.com/" target="_blank">Neon Bible</a>”. Esta es una animación hecha en flash con la cual puedes interactuar para crear tu propia versión del video. La idea se me hizo genial.</p>
<p><span id="more-592"></span></p>
<p>Pero esta vez, <a href="http://www.arcadefire.com/" target="_blank">Arcade Fire</a> y <a href="http://www.google.com" target="_blank">Google</a> van mucho más alla, haciendo el video de la canción “<a href="http://thewildernessdowntown.com/" target="_blank">We used to wait</a>” un experimento con html5 que muestra el potencial de esta tecnología que si bien no cuenta con una especificación terminada, ya está dando muestras del poder con el que cuenta.</p>
<p>En la <a href="http://thewildernessdowntown.com/" target="_blank">página en cuestión</a> (que por cierto, recomiendan altamente el uso de <a href="http://www.google.com/chrome" target="_blank">Google Chrome</a>) tu puedes escribir la dirección del barrio donde creciste (yo tuve que insertar una dirección en Estados Unidos pues la de México no me funcionó). Después de un tiempo de carga un poco largo (pero que vale la pena) podrás ver como se desarrolla el video en distintas ventanas, algunas de las cuales muestra imágenes y vistas de la dirección que escribiste.</p>
<p>Qué bueno ver a grupos rompiendo esquemas en una época donde la industria musical está en decadencia y que bueno ver el potencial de html5 en acción.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/09/image1.png" rel="lightbox[592]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/09/image_thumb1.png" width="640" height="400" /></a></p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/09/image2.png" rel="lightbox[592]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/09/image_thumb2.png" width="640" height="400" /></a> </p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/09/image3.png" rel="lightbox[592]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/09/image_thumb3.png" width="640" height="400" /></a> </p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/09/image4.png" rel="lightbox[592]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/09/image_thumb4.png" width="640" height="400" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/09/arcade-fire-y-el-poder-de-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/09/arcade-fire-y-el-poder-de-html5/</feedburner:origLink></item>
		<item>
		<title>Evento: Conoce Windows Phone 7</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/Zh97-A5b3fs/</link>
		<comments>http://jamolina.com/2010/09/evento-conoce-windows-phone-7/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 20:55:18 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[WP7]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=573</guid>
		<description><![CDATA[Las herramientas de desarrollo finales para Windows Phone 7 serán liberadas (16 de septiembre) y la versión final del sistema operativo ya fué liberada a las empresas encargadas de fabricar el hardware. Estamos cada vez más cerca del lanzamiento de este teléfono el cúal en lo personal espero con ansias (ya que mi actual teléfono [...]]]></description>
			<content:encoded><![CDATA[<p>Las herramientas de desarrollo finales para Windows Phone 7 serán liberadas (16 de septiembre) y la versión final del sistema operativo ya fué liberada a las empresas encargadas de fabricar el hardware. Estamos cada vez más cerca del lanzamiento de este teléfono el cúal en lo personal espero con ansias (ya que mi actual teléfono acaba de descomponerse de la bocina, snif).</p>
<p><span id="more-573"></span></p>
<p>En vísperas de dichos aconteciemientos en <a href="http://blogs.ligasilverlight.com" target="_blank">La Liga Silverlight</a> estamos organizando un evento para dar a conocer las herramientas de desarrollo para el Windows Phone 7. Aquí la información:</p>
<p><strong>UPDATE:</strong> Debido a que <a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032459769&amp;EventCategory=4&amp;culture=es-MX&amp;CountryCode=MX">otro evento de la misma</a> índole se llevará a cabo en la misma fecha por parte de Microsoft, nuestro evento se moverá para un día después, misma hora, mismo lugar.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold">Fecha:</td>
<td><strike>29 de septiembre</strike> 30 de septiembre del 2010</td>
</tr>
<tr>
<td style="font-weight: bold">Hora:</td>
<td>18:30</td>
</tr>
<tr>
<td style="vertical-align: text-top; font-weight: bold">Lugar:</td>
<td>Centro del Software         <br />Av. López Mateos Sur 2077-Z Sala 2.          <br />Col. Jardines de Plaza del Sol          <br />C.P. 44510, Guadalajara, Jalisco, México</td>
</tr>
</tbody>
</table>
<p style="font-weight: bold">Agenda:</p>
<table>
<tbody>
<tr>
<th>Tema</th>
<th>Expositor</th>
</tr>
<tr>
<td>Introducción a Windows Phone 7: Una propuesta diferente y una gran oportunidad (Intoducción y Market place)</td>
<td>
<p style="text-align: center"><a href="http://jorgelevy.com" target="_blank"><img class="aligncenter size-thumbnail wp-image-574" title="Jorge Levy" alt="" src="http://jamolina.com/wp-content/uploads/2010/09/KodiakMx2-150x150.png" width="50" height="50" />Jorge Levy</a></p>
</td>
</tr>
<tr>
<td>Arquitectura y desarrollo de Aplicación en Windows Phone 7 con Silverlight</td>
<td style="text-align: center"><a href="http://jamolina.com" target="_blank"><img class="aligncenter size-thumbnail wp-image-575" title="Arturo Molina" alt="" src="http://jamolina.com/wp-content/uploads/2010/09/DSC04644-150x150.jpg" width="50" height="50" />Arturo Molina</a></td>
</tr>
<tr>
<td>Desarrollo de juegos para Windows Phone con XNA Framework</td>
<td>
<p style="text-align: center"><a href="http://twitter.com/tardelavega"><img class="aligncenter size-thumbnail wp-image-576" title="Tarcisio de la Vega" alt="" src="http://jamolina.com/wp-content/uploads/2010/09/tar-150x150.jpg" width="50" height="50" />Tarcisio de la Vega</a></p>
</td>
</tr>
</tbody>
</table>
<p>Puedes registrarte <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032460117&amp;Culture=es-MX" target="_blank">aquí</a> (La fecha y la hora están mal en esa liga, pero si es ahí donde tienes que registrarte).</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/09/evento-conoce-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/09/evento-conoce-windows-phone-7/</feedburner:origLink></item>
		<item>
		<title>Actualización de Silverlight 4</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/BisS6_JpPqg/</link>
		<comments>http://jamolina.com/2010/09/actualizacin-de-silverlight-4/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 04:03:00 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/09/actualizacin-de-silverlight-4/</guid>
		<description><![CDATA[El día de ayer se liberó una actualización para Silverlight 4 (Versión 4.0.50826.0 para ser exactos). Este es un pequeño resumen de lo que incluye esta actualización: Habilidad para agregar una nueva fila al control DataGrid Mejoras el tiempo de carga de las aplicaciones Soporte para la rueda del mouse en las aplicaciones fuera del [...]]]></description>
			<content:encoded><![CDATA[<p>El día de ayer se liberó una actualización para Silverlight 4 (Versión 4.0.50826.0 para ser exactos). Este es un pequeño resumen de lo que incluye esta actualización:<span id="more-566"></span></p>
<ul>
<li>Habilidad para agregar una nueva fila al control DataGrid</li>
<li>Mejoras el tiempo de carga de las aplicaciones</li>
<li>Soporte para la rueda del mouse en las aplicaciones fuera del navegador para Mac</li>
<li>Se arreglaron unos bugs relacionador con el uso de DRM para contenido multimedia</li>
<li>Se arregló una fuga de memoria relacionada con el uso de MouseCapture</li>
<li>Se arregló una fuga de memoria relacionada con el uso de DataTemplate</li>
</ul>
<p>Aquí los pasos para bajar la nueva versión:</p>
<h3>Para usuarios finales</h3>
<p>Lo recomendado en el <a href="http://timheuer.com/blog/archive/2010/09/01/silverlight-service-release-september-2010-gdr1.aspx" target="_blank">post de Tim Heuer</a> es modificar el tag de object que hospeda nuestro xap dentro de nuestra página:</p>
<pre class="brush: xml; highlight: [5,6];">&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
  width="640" height="400"&gt;
    &lt;param name="source" value="YOUR_PATH_TO_XAP" /&gt;
    &lt;param name="background" value="white" /&gt;
    &lt;param name="minRuntimeVersion" value="4.0.50826.0" /&gt;
    &lt;param name="autoUpgrade" value="true" /&gt;
      &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=4.0.50826.0" style="text-decoration: none"&gt;
        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"
          style="border-style: none" /&gt;
       &lt;/a&gt;
&lt;/object&gt;</pre>
<p>La clave aquí están en las líneas 5 y 6, <a href="http://msdn.microsoft.com/es-es/library/cc917842(v=VS.95).aspx" target="_blank">minRuntimeVersion</a> indica que la versión mínima requerida para correr la aplicación y <a href="http://msdn.microsoft.com/es-mx/library/cc917827(v=VS.95).aspx" target="_blank">autoupgrade</a> le pedirá permiso al usuario para actualizar la aplicación si la versión de Silverlight instalada es menor a la requerida.</p>
<h3>Para desarrolladores</h3>
<p>Debes actualizar tanto el developer runtime como el SDK (preferentemente en ese orden). Aquí las ligas para realizarlo:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188039">Windows <strong>developer</strong> runtime</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188040">Mac <strong>developer</strong> runtime</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=188043">Silverlight 4.0.50826.0 SDK</a></li>
</ul>
<p>Una vez instalados el runtime y el SDK puedes crear un nuevo proyecto de Silverlight y el tag de object reflejará automáticamente la nueva versión:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/09/image.png" rel="lightbox[566]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/09/image_thumb.png" border="0" alt="image" width="634" height="480" /></a></p>
<p>Puedes leer más información en el post de <a href="http://timheuer.com/blog/archive/2010/09/01/silverlight-service-release-september-2010-gdr1.aspx" target="_blank">Tim Heuer</a> y en el Knowledge Base de la actualización (<a href="http://support.microsoft.com/kb/2164913/en-us" target="_blank">KB2164913</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/09/actualizacin-de-silverlight-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/09/actualizacin-de-silverlight-4/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC3 Preview 1 – Datos de la Vista dinámicos</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/Po-hdpEQQcs/</link>
		<comments>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-datos-de-la-vista-dinmicos/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 05:01:27 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[MVC3Preview1]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=555</guid>
		<description><![CDATA[Una de las nuevas características de MVC3 será la posibilidad de crear datos para la vista y pasarlos a la vista por medio de una variable de tipo dynamic. Esto es congruente con la idea de Microsoft de hacernos escribir cada vez menos código (como es el caso del nuevo ViewEngine Razor). ASP.NET MVC3 Preview [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las nuevas características de MVC3 será la posibilidad de crear datos para la vista y pasarlos a la vista por medio de una variable de tipo dynamic. Esto es congruente con la idea de Microsoft de hacernos escribir cada vez menos código (como es el caso del nuevo ViewEngine Razor).<span id="more-555"></span></p>
<h3>ASP.NET MVC3 Preview 1 &#8211; Índice</h3>
<ol>
<li><a href="http://jamolina.com/index.php/2010/08/asp-net-mvc3-preview-1-introduccin/" target="_self">Introducción</a></li>
<li><a href="http://jamolina.com/index.php/2010/08/asp-net-mvc3-preview-1-datos-de-la-vista-dinmicos/" target="_self">Datos de la Vista dinámicos </a></li>
</ol>
<p><em>NOTA: Este post es sobre una versión muy temprana de lo que será MVC3. Todo lo que está aquí esta sujeto a cambios drásticos mientras no se indique lo contrario.</em></p>
<p>Anteriormente, MVC nos permitía mandar cierta información del controlador a la vista usando un diccionario de tipo <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.viewdatadictionary.aspx">ViewDataDictionary</a> que permitía almacenar todo tipo de información.</p>
<p>Dicho diccionario se llenaba como cualquier otro diccionario en el controlador:</p>
<pre class="brush: csharp;">ViewData["MensajeViewData"] = "Mensaje desde ViewData";</pre>
<p>Y se accedia de la misma manera en la vista:</p>
<pre class="brush: xml;">&lt;%: ViewData["MensajeViewData"] %&gt;</pre>
<p>Ahora bien, lo nuevo en MVC3 es una nueva variable que en el controlador podemos es llamada ViewModel y es de tipo dinámico, osea, podemos asignar un valor del siguiente modo:</p>
<pre class="brush: csharp;">ViewModel.MensajeViewModel = "Mensaje desde ViewModel";</pre>
<p>Y accederlo desde la vista de la siguiente manera:</p>
<pre class="brush: xml;">&lt;%: View.MensajeViewModel %&gt;</pre>
<p>¿En qué beneficia esto? Pues quizá no parezca mucho, pero nos ahorra 3 caracteres por casa variable que usamos (usar los dos corchetes y las comillas vs solo usar un punto).</p>
<p>¿Por qué no se llama igual la variable en el controlador (ViewModel) y en la vista (View)? De acuerdo con <a href="http://haacked.com/" target="_blank">Phil Haack</a>, el problema fue que cuando estaban implementando esta funcionalidad, lo hicieron primero en la vista, y escogieron el nombre View por ser corto y claro. El problema fue cuando portaron la funcionalidad a la clase Controller ya contenía un método llamado View, por lo que tuvieron que usar un nombre disponible como ViewModel que es más largo y va en contra de su objetivo de hacernos teclear menos. En mi humilde opinión, el hecho de que los datos introducidos en ViewData y ViewModel en el controlador pueden ser accedidos por medio de View (y ViewData para el caso), el nombre View está bien, pero puede haber quien encuentre esto un tanto confuso.</p>
<p>Otra cosa interesante es que el tipo dynamic nos permite almacenar no sólo objetos sino también funciones. Por ejemplo:</p>
<pre class="brush: csharp;">public ActionResult Index(){    ViewModel.MensajeViewModel = "Pasando una función";

    Func&lt;int, int, string&gt; funcionEsMayorQue =         (operador1, operador2) =&gt;             operador1 &gt; operador2 ? "Es mayor" : "No es mayor";

    ViewModel.EsMayorQue = funcionEsMayorQue;

    return View();}</pre>
<p>Definimos una expresión lambda, en la cuál se recibirán dos enteros y se regresará un string indicando si el primer entero es mayor al primero o no (me rompí la cabeza pensando en este ejemplo). Esta función puede ser invocada en la vista de la siguiente manera:</p>
<pre class="brush: xml;">&lt;asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"&gt;    &lt;h2&gt;&lt;%: View.MensajeViewModel %&gt;&lt;/h2&gt;

    &lt;p&gt;23 &lt;%: View.EsMayorQue(23,7) %&gt; que 7&lt;/p&gt;&lt;/asp:Content&gt;</pre>
<p>Lo cuál nos resulta en algo como esto:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/08/image2.png" rel="lightbox[555]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/08/image_thumb2.png" border="0" alt="image" width="509" height="480" /></a></p>
<p>Esto fué un pequeño vistazo a esta la nueva funcionalidad de MVC3 para usar datos de la vista almacenados en una variable de tipo dynamic, la cuál no sólo nos permite almacenar objetos sino también funciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-datos-de-la-vista-dinmicos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-datos-de-la-vista-dinmicos/</feedburner:origLink></item>
		<item>
		<title>Taller de Silverlight 4 gratuito</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/vdWvx9D7fq0/</link>
		<comments>http://jamolina.com/2010/08/taller-de-silverlight-4-gratuito/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 03:53:05 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[Talleres]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/08/taller-de-silverlight-4-gratuito/</guid>
		<description><![CDATA[Mi querido amigo Rodrigo Díaz está planeando un taller gratuito de Silverlight 4. Por el momento, está en fase de planeación y está pidiendo ayuda de la comunidad para saber qué es lo que funciona mejor para la mayoría (horarios, modalidad, temas, etc…) Si tienes 3 minutos, puedes contestar la encuesta en su sitio para [...]]]></description>
			<content:encoded><![CDATA[<p>Mi querido amigo <a href="http://rdiazconcha.com" target="_blank">Rodrigo Díaz</a> está planeando un taller gratuito de Silverlight 4. Por el momento, está en fase de planeación y está pidiendo ayuda de la comunidad para saber qué es lo que funciona mejor para la mayoría (horarios, modalidad, temas, etc…)</p>
<p><span id="more-552"></span></p>
<p>Si tienes 3 minutos, puedes contestar <a href="http://rdiazconcha.com/2010/08/encuesta-taller-de-silverlight-4/" target="_blank">la encuesta en su sitio</a> para hacerle saber qué es lo que mejor funciona para ti.</p>
<p>¡Gracias! y por favor corran la voz.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/08/taller-de-silverlight-4-gratuito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/08/taller-de-silverlight-4-gratuito/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC3 Preview 1 – Introducción</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/rAqmyZGHWqs/</link>
		<comments>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-introduccin/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 04:31:26 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[MVC3Preview1]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/08/asp-net-mvc3-preview-1-introduccin/</guid>
		<description><![CDATA[Hace apenas unos pocos meses que salió ASP.NET MVC 2 y ya podemos dar un vistazo a los primeros bits de MVC 3. Si bien esto es sólo un CTP (es decir, ni siquiera es Beta) y puede haber muchos cambios de aquí a la versión final, es bueno poder ver que están pensando Phil [...]]]></description>
			<content:encoded><![CDATA[<p>Hace apenas unos pocos meses que salió ASP.NET MVC 2 y ya podemos dar un vistazo a los primeros bits de MVC 3. Si bien esto es sólo un CTP (es decir, ni siquiera es Beta) y puede haber muchos cambios de aquí a la versión final, es bueno poder ver que están pensando <a href="http://haacked.com/" target="_blank">Phil Haack</a> y compañía para la siguiente versión y es una excelente oportunidad para dar retroalimentación sobre su trabajo antes de que sea más difícil cambiar las cosas.<span id="more-551"></span></p>
<h3>ASP.NET MVC3 Preview 1 &#8211; Índice</h3>
<ol>
<li><a href="http://jamolina.com/index.php/2010/08/asp-net-mvc3-preview-1-introduccin/" target="_self">Introducción</a></li>
<li><a href="http://jamolina.com/index.php/2010/08/asp-net-mvc3-preview-1-datos-de-la-vista-dinmicos/" target="_self">Datos de la Vista dinámicos</a></li>
</ol>
<p><em>NOTA: Este post es sobre una versión muy temprana de lo que será MVC3. Todo lo que está aquí esta sujeto a cambios drásticos mientras no se indique lo contrario.</em></p>
<p>Para poder jugar con este Preview, pueden descargar un <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;displaylang=en" target="_blank">pequeño instalador</a> que incluye las DLLs y plantillas requeridas.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/08/image.png" rel="lightbox[551]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="Díalogo de Nuevo Proyecto" src="http://jamolina.com/wp-content/uploads/2010/08/image_thumb.png" border="0" alt="Díalogo de Nuevo Proyecto" width="640" height="405" /></a></p>
<p>Si bien en el diálogo de Nuevo Proyecto existe una plantilla para el View Engine de ASPX y otro para Razor (la nueva View Engine cuyo propósito es ser menos ceremonial y escribir menos caracteres de sintáxis), la idea es tener una sola plantilla y luego escoger el View Engine. Algo como lo que observamos al agregar una vista nueva:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/08/image1.png" rel="lightbox[551]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/08/image_thumb1.png" border="0" alt="image" width="441" height="438" /></a></p>
<p>Es importante mencionar que aquí se podrán integrar otros View Engines que no son de Microsoft como <a href="http://sparkviewengine.com/" target="_blank">Spark</a>, <a href="http://code.google.com/p/nhaml/" target="_blank">NHaml</a>, <a href="http://ndjango.org/index.php?title=NDjango_Home" target="_blank">NDjango</a> y <a href="http://stackoverflow.com/questions/1451319/asp-net-mvc-view-engine-comparison" target="_blank">muchas otras</a>.</p>
<p>En las próximas semanas estaré escribiendo sobre algunas de las nuevas características incluídas (y no incluídas) en este release.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-introduccin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/08/asp-net-mvc3-preview-1-introduccin/</feedburner:origLink></item>
		<item>
		<title>StackOverflow en español</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/b6wVPS5tvb0/</link>
		<comments>http://jamolina.com/2010/07/stackoverflow-en-espaol/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:53:23 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Stackoverflow]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/07/stackoverflow-en-espaol/</guid>
		<description><![CDATA[Muchas, muchas han sido las veces que he encontrado respuestas a mis preguntas sobre casi cualquier tema de programación en StackOverflow. Esta creación de Jeff Atwood y Joel Spolsky es, a mi gusto personal, el mejor foro que hay para desarrollo de software. Hace unos meses, decidieron abrir su plataforma para quien lo quisiera de [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas, muchas han sido las veces que he encontrado respuestas a mis preguntas sobre casi cualquier tema de programación en <a href="http://stackoverflow.com/">StackOverflow</a>. Esta creación de <a href="http://www.codinghorror.com/blog/">Jeff Atwood</a> y <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> es, a mi gusto personal, el mejor foro que hay para desarrollo de software.<span id="more-542"></span></p>
<p style="text-align: center;"><a href="http://jamolina.com/wp-content/uploads/2010/07/image.png" rel="lightbox[542]"><img style="display: inline; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/07/image_thumb.png" border="0" alt="image" width="244" height="71" /></a></p>
<p>Hace unos meses, decidieron abrir su plataforma para quien lo quisiera de manera gratuita. Esto quiere decir, que por medio de un proceso definido en <a href="http://area51.stackexchange.com/">Area51</a>, la gente puede crear propuestas para tener un sitio muy similar, pero de temas diferentes (cocina, construcción, etc.). En conjunto con <a href="http://maromasdigitales.net/">David Mora</a> y <a href="http://rdiazconcha.com">Rodrigo Díaz</a>, decidimos mandar nuestra propuesta para un sito como StackOverlfow, pero en español.</p>
<p>¿Por qué en español? Segun <a href="http://www.wolframalpha.com/input/?i=spanish">Wolpram Alpha</a>, El español es hablado por unos 417 millones de personas (6.2% de la población mundial) y es el 3er idioma más hablado en el mundo (diferentes fuentes difieren en si es la 2da o 3ra lengua más hablada). Sin embargo, muchos recurrimos a sitios en inglés porque ser un idioma universal en el rubro.</p>
<p>La idea de este sitio es formar un espacio para desarrolladores de cualquier lenguaje de programación (C, C++, C#, Java, Ruby, Phyton, Javascript, Visual Basic, LISP, etc…), así como frameworks, librerías y herramientas de los mismos (LINQ, jQuery, ADO.NET, Drupal, etc…).</p>
<p>Si estás interesado, por favor apoya <a href="http://area51.stackexchange.com/proposals/13664/desarrollo-de-software-en-espanol">la propuesta en Area51</a> y corre la voz. ¡Muchas gracias!</p>
<p><strong>UPDATE:</strong> Estoy consciente de la existencia de una página similar llamada <a href="http://yoprogramo.net/">YoProgramo.NET</a>, la cuál me parece buena propuesta, pero me parece que tener el respaldo de un sitio ya establecido, con mayor funcionalidad y gente dedicada a desarrollar más funcionalidad, le daría mejor continuidad al proyecto. Además, no dependería de un pequeño grupo de personas, sino de una comunidad comprometida.</p>
<p><strong>UPDATE 2: </strong>Para apoyar la propuesta, sólo tienen que &#8220;seguirla&#8221; (osea, darle Follow). Los sitios de StackExchange usan OpenID, por lo que si ya tienen cuenta en google, yahoo, blogger, wordpress, etc&#8230; no necesitan registrarse.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/07/stackoverflow-en-espaol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/07/stackoverflow-en-espaol/</feedburner:origLink></item>
		<item>
		<title>Intellisense con jQuery 1.4.2 en Visual Studio</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/-JFYGTzYMuo/</link>
		<comments>http://jamolina.com/2010/04/intellisense-con-jquery-1-4-2-en-visual-studio/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 05:15:17 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/04/intellisense-con-jquery-1-4-2-en-visual-studio/</guid>
		<description><![CDATA[Como ya es sabido, Visual Studio 2010 (y 2008 con ayuda de un parche) soporta Intellisense para  jQuery. Sin embargo, después de más de dos meses de haber salido la versión 1.4.2, aún no hay señales del archivo -vsdoc.js en el sitio de jQuery. Pero no hay por que entrar en pánico, aquí una pequeña [...]]]></description>
			<content:encoded><![CDATA[<p>Como <a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx" target="_blank">ya es sabido</a>, Visual Studio 2010 (y 2008 con ayuda de un <a href="http://blogs.msdn.com/webdevtools/archive/2008/11/07/hotfix-to-enable-vsdoc-js-intellisense-doc-files-is-now-available.aspx" target="_blank">parche</a>) soporta Intellisense para  <a href="http://jquery.com" target="_blank">jQuery</a>. Sin embargo, después de más de dos meses de haber salido la versión 1.4.2, aún no hay señales del archivo -vsdoc.js en el <a href="http://docs.jquery.com/Downloading_jQuery" target="_blank">sitio de jQuery</a>.</p>
<p><span id="more-521"></span></p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/04/image1.png" rel="lightbox[521]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb1.png" border="0" alt="image" width="456" height="237" /></a></p>
<p>Pero no hay por que entrar en pánico, aquí una pequeña receta para crear tu propio archivo <strong><em>jquery-1.4.2-vsdoc.js</em></strong></p>
<ol>
<li><span style="background-color: #ffffff;"><a href="http://docs.jquery.com/Downloading_jQuery" target="_blank">Descargar</a> la versión minificada y/o la comprimida, así como también la documentación para Visual Studio de la versión 1.4.1 (en el caso de Visual Studio 2010, las plantillas de pro<a href="http://jamolina.com/wp-content/uploads/2010/04/image2.png" rel="lightbox[521]">yectos como MVC2 ya traen esa versión de la documentación)<img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb2.png" border="0" alt="image" width="387" height="240" /></a> </span></li>
<li><span style="background-color: #ffffff;">Agregar los scripts a la solución<a href="http://jamolina.com/wp-content/uploads/2010/04/image3.png" rel="lightbox[521]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb3.png" border="0" alt="image" width="224" height="176" /></a> </span></li>
<li><span style="background-color: #ffffff;">Renombrar <em><strong>jquery-1.4.1-vsdoc.js</strong></em> a <em><strong>jquery-1.4.2-vsdoc.js</strong></em></span></li>
<li><span style="background-color: #ffffff;">Abrir el archivo renombrado y buscar la variable donde se define la versión de la librería (línea 225)<a href="http://jamolina.com/wp-content/uploads/2010/04/image4.png" rel="lightbox[521]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb4.png" border="0" alt="image" width="523" height="149" /></a> </span></li>
<li><span style="background-color: #ffffff;">Como se puede ver en el <a href="http://api.jquery.com/category/version/1.4.2/" target="_blank">log de cambios</a>, esta versión agrega dos métodos: delegate() y undelegate(), así que sólo tenemos que agregar la documentación de dichos métodos después de documentación de unbind(), esto en la línea 2937<a href="http://jamolina.com/wp-content/uploads/2010/04/image5.png" rel="lightbox[521]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb5.png" border="0" alt="image" width="480" height="285" /></a> </span></li>
</ol>
<p>A continuación la documentación completa a agregar:</p>
<pre class="brush: js;">delegate: function( selector, types, data, fn ) {
/// &lt;summary&gt;
///   Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. See also "live".
/// &lt;/summary&gt;
/// &lt;param name="selector" type="String"&gt;
///     An expression to search with.
/// &lt;/param&gt;
/// &lt;param name="types" type="String"&gt;
///     A string containing a JavaScript event type, such as "click" or "keydown".
/// &lt;/param&gt;
/// &lt;param name="data" type="Object"&gt;
///     A map of data that will be passed to the event handler.
/// &lt;/param&gt;
/// &lt;param name="fn" type="Function"&gt;
///     A function to execute at the time the event is triggered.
/// &lt;/param&gt;
    return this.live( types, data, fn, selector );
},
undelegate: function( selector, types, fn ) {
/// &lt;summary&gt;
///   Remove a handler from the event for all elements which match the current selector, now or in the future, based upon a specific set of root elements. See also "die".
/// &lt;/summary&gt;
/// &lt;param name="selector" type="String"&gt;
///     An expression to search with.
/// &lt;/param&gt;
/// &lt;param name="types" type="String"&gt;
///     A string containing a JavaScript event type, such as "click" or "keydown".
/// &lt;/param&gt;
/// &lt;param name="data" type="Object"&gt;
///     A map of data that will be passed to the event handler.
/// &lt;/param&gt;
/// &lt;param name="fn" type="Function"&gt;
///     A function to execute at the time the event is triggered.
/// &lt;/param&gt;
    if ( arguments.length === 0 ) {
            return this.unbind( "live" );

    } else {
        return this.die( types, null, fn, selector );
    }
},</pre>
<p>¡Listo! Ya tienen Intellisense en Visual Studio. No olviden agregar la referencia a la librería:</p>
<pre class="brush: js;">&lt;script src="/Scripts/jquery-1.4.2.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p><a href="http://jamolina.com/wp-content/uploads/2010/04/image6.png" rel="lightbox[521]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb6.png" border="0" alt="image" width="640" height="138" /></a></p>
<p>Referencia: <a href="http://stackoverflow.com/questions/2323366/jquery-1-4-2-vsdoc" target="_blank">StackOverflow</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/04/intellisense-con-jquery-1-4-2-en-visual-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/04/intellisense-con-jquery-1-4-2-en-visual-studio/</feedburner:origLink></item>
		<item>
		<title>Evento de lanzamiento de Visual Studio 2010 – ¡Gracias!</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/DCu01HriRVM/</link>
		<comments>http://jamolina.com/2010/04/evento-de-lanzamiento-de-visual-studio-2010-gracias/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 21:37:02 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=504</guid>
		<description><![CDATA[El pasado lunes 12 de abril se llevo acabo del evento de lanzamiento de Visual Studio 2010 en el Centro del Software de Guadalajara organizado por La Liga Silverlight y La Comunidad Guadalajara.NET. En dicho evento tuve la oportunidad de dar dos presentaciones: Stay in the zone. En donde se muestran las nuevas herramientas para [...]]]></description>
			<content:encoded><![CDATA[<p>El pasado lunes 12 de abril se llevo acabo del evento de lanzamiento de Visual Studio 2010 en el Centro del Software de Guadalajara organizado por <a href="http://blogs.ligasilverlight.com/" target="_blank">La Liga Silverlight</a> y <a href="http://comunidadgdl.net/" target="_blank">La Comunidad Guadalajara.NET.</a></p>
<p><span id="more-504"></span></p>
<p>En dicho evento tuve la oportunidad de dar dos presentaciones:</p>
<ul>
<li><span style="background-color: #ffffff;">Stay in the zone. En donde se muestran las nuevas herramientas para ayudar al desarrollador a mantenerse enfocado (o recuperar la concentración) en lo que realmente importa. Muchos detalles que por pequeños que sean hacen una gran diferencia. Este ejemplo fue hecho con ASP.NET MVC, lo cuál lo hizo más interesante aún.</span></li>
<li><span style="background-color: #ffffff;">Windows Phone 7 + Azure. Aquí se mostró Silverlight como plataforma de desarrollo para el nuevo sistema operativo de smartphones. Además las capacidades y facilidad de uso de Windows Azure.</span></li>
</ul>
<p>La respuesta de la gente fue buena. Unas 50 personas en total aunque iban y venian <img src='http://jamolina.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Y como siempre me agradó platicar con la audiencia sobre dudas y nuevas tecnologías.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00253.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00253" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00253_thumb.jpg" border="0" alt="DSC00253" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00254.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00254" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00254_thumb.jpg" border="0" alt="DSC00254" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00258.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00258" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00258_thumb.jpg" border="0" alt="DSC00258" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00068201004121828.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00068-20100412-1828" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00068201004121828_thumb.jpg" border="0" alt="IMG00068-20100412-1828" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00064201004121626.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00064-20100412-1626" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00064201004121626_thumb.jpg" border="0" alt="IMG00064-20100412-1626" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00065201004121626.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00065-20100412-1626" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00065201004121626_thumb.jpg" border="0" alt="IMG00065-20100412-1626" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00069201004121848.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00069-20100412-1848" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00069201004121848_thumb.jpg" border="0" alt="IMG00069-20100412-1848" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00071201004121849.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00071-20100412-1849" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00071201004121849_thumb.jpg" border="0" alt="IMG00071-20100412-1849" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00256.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00256" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00256_thumb.jpg" border="0" alt="DSC00256" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00257.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00257" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00257_thumb.jpg" border="0" alt="DSC00257" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/IMG00062201004121625.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="IMG00062-20100412-1625" src="http://jamolina.com/wp-content/uploads/2010/04/IMG00062201004121625_thumb.jpg" border="0" alt="IMG00062-20100412-1625" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00262.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00262" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00262_thumb.jpg" border="0" alt="DSC00262" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00263.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00263" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00263_thumb.jpg" border="0" alt="DSC00263" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00264.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00264" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00264_thumb.jpg" border="0" alt="DSC00264" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00265.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00265" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00265_thumb.jpg" border="0" alt="DSC00265" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00266.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00266" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00266_thumb.jpg" border="0" alt="DSC00266" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00267.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00267" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00267_thumb.jpg" border="0" alt="DSC00267" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00268.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00268" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00268_thumb.jpg" border="0" alt="DSC00268" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00269.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" title="DSC00269" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00269_thumb.jpg" border="0" alt="DSC00269" width="180" height="135" /></a> <a href="http://jamolina.com/wp-content/uploads/2010/04/DSC00270.jpg" rel="lightbox[504]"><img style="display: inline; border: 0px;" src="http://jamolina.com/wp-content/uploads/2010/04/DSC00270_thumb.jpg" border="0" alt="" width="180" height="135" /></a></p>
<p>El siguiente evento se llevará a cabo mañana jueves 15 de abril en el CUCEI:</p>
<p><a href="http://www.cucei.udg.mx/">Centro de Ciencias Exactas e Ingenierías, UdG</a><br />
<strong>Fecha: </strong>jueves, 15 de abril de 2010<br />
<strong>Hora:</strong> de 11:30 a.m. a 2:00 p.m.<br />
<strong>Lugar: </strong>Auditorio Antonio Alatorre, CUCEI</p>
<p><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032447884&amp;Culture=es-MX">Registro para evento CUCEI</a></strong></p>
<p>¡Los esperamos!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/04/evento-de-lanzamiento-de-visual-studio-2010-gracias/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/04/evento-de-lanzamiento-de-visual-studio-2010-gracias/</feedburner:origLink></item>
		<item>
		<title>Probando la Windows Phone 7 hoy</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/j3fMGF_dhuY/</link>
		<comments>http://jamolina.com/2010/04/probando-la-windows-phone-7-hoy/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 05:18:47 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[WP7]]></category>
		<category><![CDATA[emulador]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=460</guid>
		<description><![CDATA[El día de hoy, Gizmodo puso disponible una guía para hacer que el emulador de Windows Phone 7 que viene incluido en el SDK del cuál ya habiamos hablado previamente corra el sistema operativo completo. Si ya tienen el SDK instalado, solo necesitan bajar la siguiente imagen, ya sea directamente aquí o por torrent aquí. [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy, <a href="http://gizmodo.com">Gizmodo</a> puso disponible <a href="http://gizmodo.com/5513871/how-to-try-windows-phone-7-right-now">una guía</a> para hacer que el emulador de Windows Phone 7 que viene incluido en el SDK del cuál ya habiamos <a href="http://jamolina.com/index.php/2010/03/hola-windows-phone-7-series/">hablado previamente</a> corra el sistema operativo completo.</p>
<p><span id="more-460"></span></p>
<p>Si ya tienen el SDK instalado, solo necesitan bajar la siguiente imagen, ya sea directamente <a href="http://forum.xda-developers.com/showpost.php?p=5922577&amp;postcount=295">aquí</a> o por torrent <a href="http://btjunkie.org/torrent/WinPho-7/41960a6955bb69a507fe7a3e855c56ba99022b320e98">aquí</a>. [<strong>NOTA:</strong> Yo bajé el archivo directamente, no me hago responsable del torrent <img src='http://jamolina.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ]</p>
<p>Una vez que tienen la imagen, hay que colocarla en C:\Program Files\Microsoft SDKs\WindowsPhone\v7.0\Emulation\Images. Es muy recomendable respaldar la imagen que ya se encuentra ahí (por ejemplo, agregarle la extensión .old o algo por el estilo) ya que al parecer la imagen completa no permite instalar aplicaciones para debugear. Finalmente solo renombran la imagen descargada a WM70C1.bin</p>
<p>Ahora solo entramos a Visual Studio 2010 y creamos un proyecto nuevo, de cualquier tipo pero que sea para Window Phone, presinamos F5 y ¡Listo!</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/04/image.png" rel="lightbox[460]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/04/image_thumb.png" border="0" alt="image" width="640" height="400" /></a></p>
<p>Lamentablemente, yo no pude logearme a ninguna de mis cuentas para tratar de tener la experiencia completa. Pero por lo menos uno puede darse una idea más completa de lo que será.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/04/probando-la-windows-phone-7-hoy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/04/probando-la-windows-phone-7-hoy/</feedburner:origLink></item>
		<item>
		<title>Evento de Lanzamiento Visual Studio 2010 y Windows Azure</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/lJhtb-LBJbw/</link>
		<comments>http://jamolina.com/2010/04/evento-de-lanzamiento-visual-studio-2010-y-windows-azure/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 21:12:01 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/04/evento-de-lanzamiento-visual-studio-2010-y-windows-azure/</guid>
		<description><![CDATA[En La Liga Silverlight y La Comunidad Guadalajara.NET estamos organizando diferentes eventos de lanzamiento de Visual Studio 2010 y Azure, en la ciudad de Guadalajara tendremos dos eventos con la siguiente agenda: Stay in the zone: Mejoras del producto para que el desarrollador no tenga que salir fuera de VS para conseguir lo que necesita [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.ligasilverlight.com/wp-content/uploads/2010/04/img001.jpg" rel="lightbox[456]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="img001" border="0" alt="img001" src="http://blogs.ligasilverlight.com/wp-content/uploads/2010/04/img001_thumb.jpg" width="644" height="245" /></a></p>
<p><span id="more-456"></span></p>
<p>En <a href="http://blogs.ligasilverlight.com/">La Liga Silverlight</a> y <a href="http://comunidadgdl.net/">La Comunidad Guadalajara.NET</a> estamos organizando diferentes eventos de lanzamiento de Visual Studio 2010 y Azure, en la ciudad de Guadalajara tendremos dos eventos con la siguiente agenda:</p>
<ul>
<li><strong>Stay in the zone</strong>: Mejoras del producto para que el desarrollador no tenga que salir fuera de VS para conseguir lo que necesita para trabajar. Esto incluye mejoras de la interfaz, Extension Manager y Code Snippets.       </li>
<li><strong>Desarrollo para Windows7</strong>: VS2010 permite crear aplicaciones para aprovechar todas las mejoras que Windows7 tiene de manera rápida. Esto incluye soporte multitouch, ribbon, animaciones.       </li>
<li><strong>Desarrollo para Sharepoint</strong>: Las nuevas herramientas de Visual Studio para ayudar a desarrollar sobre esta plataforma tan popular       </li>
<li><strong>Phone+Azure</strong>: Herramientas para crear aplicaciones de Windows Phone Series 7 con Silverlight y utilizar servicios en Windows Azure para que tu aplicación se conecte con otros usuarios.       </li>
<li><strong>Team Collaboration</strong>: Mejoras para la colaboración del equipo, esto incluye, Team Foundation Client como parte de VS profesional además de Team Explorer en la web, diagramas de arquitectura para entender el código que otros desarrolladores escribieron, utilizar información recolectada automáticamente por los testers para corregir defectos en el código y nuevas gráficas creadas automáticamente para visualizar el progreso del equipo. </li>
</ul>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="50%">
<p>Registro evento 1, <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032447471&amp;Culture=es-MX" target="_blank">Centro del Software</a>             <br />Fecha: lunes, 12 de abril de 2010             <br />Hora: de 4:00 p.m. a 8:00 p.m.             <br />Lugar: Sala 2, Centro del Software.             <br />Plaza del Ángel</p>
</td>
<td valign="top" width="50%">
<p>Registro Evento 2, <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032447471&amp;Culture=es-MX" target="_blank">Centro de Ciencias Exactas e Ingenierías, UdG</a>             <br />Fecha: jueves, 15 de abril de 2010             <br />Hora: de 11:30 a.m. a 2:00 p.m.             <br />Lugar: Auditorio Antonio Alatorre, CUCEI</p>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>Para el evento en el Centro de Software un servidor estará dando las pláticas de Stay in The Zone y Phone + Azure. Estaremos dando un par de obsequios (no, lo siento, no habrá licencias gratis)</p>
<p>Para más información y otros eventos en México entra a: <a href="http://www.tuvidaencodigo.com">http://www.tuvidaencodigo.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/04/evento-de-lanzamiento-visual-studio-2010-y-windows-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/04/evento-de-lanzamiento-visual-studio-2010-y-windows-azure/</feedburner:origLink></item>
		<item>
		<title>Silverlight 4 Release Candidate</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/VaDSWRwEK5k/</link>
		<comments>http://jamolina.com/2010/03/silverlight-4-release-candidate/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 16:03:16 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Blend 4]]></category>
		<category><![CDATA[Silverlight 4 RC]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/03/silverlight-4-release-candidate/</guid>
		<description><![CDATA[El día de ayer, en el Mix10, Scott Guthrie anunció Silverlight 4 RC. Dicha versión esta disponible para descargar desde el momento del anuncio. Aquí un pequeño resumen de lo que necesitan: Visual Studio 2010 RC Silverlight 4 Tools para VS2010. Esto incluye el runtime, SDK, herramientas para VS y WCF RIA Services Silverlight Toolkit [...]]]></description>
			<content:encoded><![CDATA[<p>El día de ayer, en el <a href="http://live.visitmix.com/" target="_blank">Mix10</a>, <a href="http://weblogs.asp.net/scottgu/" target="_blank">Scott Guthrie</a> anunció Silverlight 4 RC. Dicha versión esta disponible para descargar desde el momento del anuncio. Aquí un pequeño resumen de lo que necesitan:<span id="more-455"></span></p>
<ol>
<li><span style="background-color: #ffffff;"><a href="http://go.microsoft.com/fwlink/?LinkID=151797" target="_blank">Visual Studio 2010 RC</a></span></li>
<li><span style="background-color: #ffffff;"><a href="http://go.microsoft.com/fwlink/?LinkID=141284" target="_blank">Silverlight 4 Tools para VS2010</a>. Esto incluye el runtime, SDK, herramientas para VS y WCF RIA Services</span></li>
<li><span style="background-color: #ffffff;"><a href="http://silverlight.codeplex.com/" target="_blank">Silverlight Toolkit</a> release de Marzo 2010 (Opcional, disponible próximamente)</span></li>
<li><span style="background-color: #ffffff;"><a href="http://go.microsoft.com/fwlink/?LinkId=185121" target="_blank">WCF RIA Services toolkit</a> (Opcional, son controles extras a los incluídos en la instalación de SL4 Tools)</span></li>
<li><span style="background-color: #ffffff;"><a href="http://go.microsoft.com/fwlink/?LinkId=169446" target="_blank">Expression Blend 4</a> (Opcional)</span></li>
<li><span style="background-color: #ffffff;"><a href="http://silverlight.net/getstarted/devices/windows-phone" target="_blank">Herramientas para el desarrollo de Windows Phone 7</a> (WP7)</span></li>
<li><span style="background-color: #ffffff;"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=47f5c718-9dec-4557-9687-619c0fdd3d4f&amp;displaylang=en" target="_blank">Add-in para desarrollo de Windows Phone en Blend</a> y <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=86370108-4c14-42ee-8855-226e5dd9b85b" target="_blank">SDK Preview para Windows Phone en Blend</a></span> (WP7)</li>
</ol>
<p>Próximamente estaremos publicando artículos sobre las novedades de esta versión los cambios. Si no pueden esperar, les recomiendo ver los posts de <a href="http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx" target="_blank">Tim Heuer</a> y <a href="http://kodierer.blogspot.com/2010/03/silverlight-4-release-candidate.html" target="_blank">René Schulte</a> sobre Silverlight 4 y el de <a href="http://electricbeach.org/?p=438" target="_blank">Christian Schormann</a> sobre Blend 4.</p>
<p>Por lo pronto ya contamos con un pequeño <a href="http://jamolina.com/index.php/2010/03/hola-windows-phone-7-series/" target="_blank">Hola Mundo para Windows Phone 7</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/03/silverlight-4-release-candidate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/03/silverlight-4-release-candidate/</feedburner:origLink></item>
		<item>
		<title>Hola Windows Phone 7 Series</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/HfAjZSTAwmE/</link>
		<comments>http://jamolina.com/2010/03/hola-windows-phone-7-series/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 20:28:54 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/03/hola-windows-phone-7-series/</guid>
		<description><![CDATA[El día de hoy, en el Mix10, se anunció la plataforma de desarrollo para el Windows Phone 7 series (de aquí en adelante WP7). Si bien desde hace varios días corría la noticia, el anuncio oficial genera mucha expectativa y entusiasmo en la comunidad de programadores de Silverlight y XNA. En esta ocasión, les voy [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy, en el <a href="http://www.visitmix.com/" target="_blank">Mix10</a>, se anunció la plataforma de desarrollo para el Windows Phone 7 series (de aquí en adelante WP7). Si bien desde hace varios días corría la noticia, el anuncio oficial genera mucha expectativa y entusiasmo en la comunidad de programadores de Silverlight y XNA.</p>
<p><span id="more-453"></span></p>
<p>En esta ocasión, les voy a presentar el típico “Hola Mundo” versión WP7. Necesitarán:</p>
<ul>
<li><font style="background-color: #ffffff"><a href="http://www.microsoft.com/visualstudio/en-us/download" target="_blank">Visual Studio 2010 RC</a></font> </li>
<li><font style="background-color: #ffffff"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en" target="_blank">Windows Phone Developer Tools CTP</a></font> </li>
</ul>
<p>Ó en su defecto, la versión gratuita <a href="http://www.microsoft.com/express/phone/" target="_blank">Visual Studio 2010 Express for Windows Phone</a>.</p>
<p>Una vez instaladas las herramientas requeridas, abrimos Visual Studio 2010 (VS2010) y creamos un nuevo proyecto. Podemos ver que tenemos 2 nuevas secciones en nuestra ventana:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image6.png" rel="lightbox[453]"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="New Project template" border="0" alt="New Project template" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb6.png" width="640" height="436" /></a> </p>
<p>Seleccionamos Windows Phone Application bajo la sección Silverlight for Windows Phone y nombramos el proyecto.</p>
<p>Obtenemos el siguiente template por default:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image7.png" rel="lightbox[453]"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb7.png" width="640" height="383" /></a> </p>
<p>Vamos a hacer unas modificaciones a nuestro XAML, donde cambiaremos los título que aparecen de forma predeterminada y agregaremos al ContentGrid un TextBox y un Button:</p>
<pre class="brush: xml;">&lt;Grid x:Name=&quot;LayoutRoot&quot;
      Background=&quot;{StaticResource PhoneBackgroundBrush}&quot;&gt;
    &lt;Grid.RowDefinitions&gt;
        &lt;RowDefinition Height=&quot;Auto&quot; /&gt;
        &lt;RowDefinition Height=&quot;*&quot; /&gt;
    &lt;/Grid.RowDefinitions&gt;

    &lt;!--TitleGrid is the name of the application and page title--&gt;
    &lt;Grid x:Name=&quot;TitleGrid&quot;
          Grid.Row=&quot;0&quot;&gt;
        &lt;TextBlock Text=&quot;HOLA MUNDO&quot;
                   x:Name=&quot;textBlockPageTitle&quot;
                   Style=&quot;{StaticResource PhoneTextPageTitle1Style}&quot; /&gt;
        &lt;TextBlock Text=&quot;Hola Mundo&quot;
                   x:Name=&quot;textBlockListTitle&quot;
                   Style=&quot;{StaticResource PhoneTextPageTitle2Style}&quot; /&gt;
    &lt;/Grid&gt;

    &lt;!--ContentGrid is empty. Place new content here--&gt;
    &lt;Grid x:Name=&quot;ContentGrid&quot;
          Grid.Row=&quot;1&quot;&gt;
        &lt;TextBox Height=&quot;72&quot;
                 HorizontalAlignment=&quot;Left&quot;
                 Margin=&quot;6,6,0,0&quot;
                 Name=&quot;txtNombre&quot;
                 Text=&quot;&quot;
                 VerticalAlignment=&quot;Top&quot;
                 Width=&quot;468&quot; /&gt;
        &lt;Button Content=&quot;Saluda&quot;
                Height=&quot;70&quot;
                HorizontalAlignment=&quot;Left&quot;
                Margin=&quot;146,84,0,0&quot;
                Name=&quot;button1&quot;
                VerticalAlignment=&quot;Top&quot;
                Width=&quot;160&quot;
                Click=&quot;button1_Click&quot; /&gt;
    &lt;/Grid&gt;
&lt;/Grid&gt;</pre>
<p>&#160;</p>
<p>Además en el evento del botón tendremos este sencillo código:</p>
<pre class="brush: csharp;">private void button1_Click(object sender, RoutedEventArgs e)
{
    this.textBlockListTitle.Text = &quot;Hola &quot; + txtNombre.Text;
}</pre>
<p>&#160;</p>
<p>Ahora solo tenemos que correr la aplicación para ver el resultado en el emulador:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image8.png" rel="lightbox[453]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Demo corriendo" border="0" alt="Demo corriendo" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb8.png" width="640" height="381" /></a> </p>
<p>Es importante hacer notar que el emulador tiene muchas funciones, como cambiar la orientación, capturar el teclado y simular multitouch (con monitores que lo soporten claro está).</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image9.png" rel="lightbox[453]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Demo horizontal" border="0" alt="Demo horizontal" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb9.png" width="631" height="323" /></a> </p>
<p>También hay que considerar que esto es un CTP (Community Technical Preview). En mi caso el emulador es muy lento de cargar y me salian errores de repente. Sin embargo, vale la pena empezar a conocer las herramientas de desarrollo para el WP7.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/03/hola-windows-phone-7-series/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/03/hola-windows-phone-7-series/</feedburner:origLink></item>
		<item>
		<title>Photosynth en nuestra app de Silverlight</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/UR72IgN1sNw/</link>
		<comments>http://jamolina.com/2010/03/photosynth-en-nuestra-app-de-silverlight/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:02:33 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[HtmlHost]]></category>
		<category><![CDATA[Photosynth]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=438</guid>
		<description><![CDATA[Photosynth es una herramienta muy interesante que nos ayuda a crear panoramas semi tridimensionales de una manera muy sencilla (solo seleccionas un conjunto de fotos de un mismo lugar y las subes): El otro día mi amigo Jorge Levy estaba desarrollando una aplicación de Silverlight para una empresa de Tamales. Dicha aplicación cuenta con una [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://photosynth.net/default.aspx" target="_blank">Photosynth</a> es una herramienta muy interesante que nos ayuda a crear panoramas semi tridimensionales de una manera muy sencilla (solo seleccionas un conjunto de fotos de un mismo lugar y las subes):</p>
<p><span id="more-438"></span></p>
<p>El otro día mi amigo <a href="http://jorgelevy.com" target="_blank">Jorge Levy</a> estaba desarrollando una aplicación de Silverlight para una empresa de Tamales. Dicha aplicación cuenta con una página de <a href="http://tamatlan.com/#/Contacto" target="_blank">contacto</a>, donde muestra un control de Bing Maps y una opción para ver la fachada del local. Lo malo de esto es que para ver la fachada, el link te lleva a la página de Photosynth donde puedes ver el synth del local.</p>
<p>Me pareció una buena idea, pero no me gustó el hecho de que no pudieras ver el synth dentro de la aplicación. Me di a la tarea de investigar una forma de hacer esto. Primero pensé, en Silverlight 4 beta es posible poner contenido HTML, pero esto tiene dos problemas actualmente. Primero, ¡Es BETA! por lo que para ver la página estarías obligando al usuario a buscar el runtime de SL4Beta (pues en la página te dan la liga para instalar la última versión estable). Segundo, esta funcionalidad solo funciona fuera del navegador, lo cuál tampoco queremos, pues no queremos forzar al usuario a instalar una appliación nada más para esto.</p>
<p>Pues bien, después de buscar y buscar, encontré este <a href="http://johanneskebeck.spaces.live.com/Blog/cns!42E1F70205EC8A96!10779.entry" target="_blank">post</a> donde aprendí sobre la existencia de un control gratuito llamado <a href="http://www.divelements.co.uk/silverlight/tools.aspx" target="_blank">HtmlHost</a>. Todo lo que hay que hacer es descargar el zip y descomprimirlo en su lugar predilecto para librerías.</p>
<p>Para una pequeña demostración, vamos a crear un proyecto nuevo de Silverlight, y vamos a agregar como referencia el emsamblado que acabamos de descargar: Divelements.SilverlightTools.dll</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="279" height="480" /></a></p>
<p>Después abrimos MainPage.xaml en Blend para hacer una layout rápido:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image1.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb1.png" border="0" alt="image" width="633" height="480" /></a></p>
<p>Aquí tenemos una versión resumida del XAML:</p>
<pre class="brush: xml; collapse: false; highlight: [6,17];">&lt;UserControl x:Class="PhotosynthDemo.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:divel="clr-namespace:Divelements.SilverlightTools;assembly=Divelements.SilverlightTools"
     mc:Ignorable="d"
     d:DesignWidth="640"
     d:DesignHeight="480"&gt;

    &lt;Grid x:Name="LayoutRoot"
          Background="#FF293949"&gt;

        &lt;Border BorderBrush="#FF9A0707"
                BorderThickness="3"
                Margin="82,88,90,120"&gt;
            &lt;divel:HtmlHost Name="htmlHost" /&gt;
        &lt;/Border&gt;

    &lt;/Grid&gt;
&lt;/UserControl&gt;</pre>
<p>En la línea 6 estamos agregando el namespace del control HtmlHost y en la línea 17 es donde colocamos y nombramos nuestro control.</p>
<p>Ahora necesitamos asignar un valor a la propiedad SourceHtml del HtmlHost. Vamos a usar el mismo código que nos da Photosynth como si lo fueramos a poner en una página Html común y corriente:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image2.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb2.png" border="0" alt="image" width="640" height="307" /></a></p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image3.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb3.png" border="0" alt="image" width="443" height="196" /></a></p>
<p>Y en el code behind vamos a asignar esa cadena a la propiedad antes mencionada:</p>
<pre class="brush: csharp; collapse: false;">namespace PhotosynthDemo
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            htmlHost.SourceHtml = "&lt;iframe frameborder='0' src='http://photosynth.net/embed.aspx?cid=e9f3bd27-c3f5-4e2e-8022-3a746a4b3119&amp;delayLoad=false&amp;slideShowPlaying=false' width='100%' height='100%'&gt;&lt;/iframe&gt;";
        }
    }
}</pre>
<p>Como podemos ver tuvimos que hacer unos cambios a la cadena, primero tenemos que cambiar todas las comillas dobles, por comillas sencillas. También cambiamos el parámetro delayLoad a false y el with y height a 100%.</p>
<p>Si en este momento corren el proyecto, funcionará bien, pero verán un cuadro de dialogo con la siguiente advertencia:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image4.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb4.png" border="0" alt="image" width="491" height="161" /></a></p>
<p>Para corregir esto solo tenemos que ir a nuestro aspx de nuestro proyecto web:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/03/image5.png" rel="lightbox[438]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/03/image_thumb5.png" border="0" alt="image" width="262" height="384" /></a></p>
<p>Y en la sección del div llamado silverlightControlHost vamos a agregar un parámetro:</p>
<pre class="brush: xml; collapse: false;">&lt;param name="windowless" value="true" /&gt;</pre>
<p>Pueden ver un demo en vivo <a href="http://demos.jamolina.com/photosynthdemo/" target="_blank">aquí</a> y descargar el código <a href="http://jamolina.codeplex.com/releases/view/41767" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/03/photosynth-en-nuestra-app-de-silverlight/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/03/photosynth-en-nuestra-app-de-silverlight/</feedburner:origLink></item>
		<item>
		<title>Recorriendo elementos del VisualTree</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/aXUW1lvtMwA/</link>
		<comments>http://jamolina.com/2010/02/recorriendo-elementos-del-visualtree/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 23:11:57 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[VisualTreeHelper]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=424</guid>
		<description><![CDATA[Todo elemento desplegado en nuestra aplicación de Silverlight pertenece a una estructura jerárquica conocida como el VisualTree. La clase VisualTreeHelper nos provee de varios métodos para recorrer dicha estructura entre ellos: GetChildrenCount – Obtiene el número de Hijos que tiene el UIElement GetChild – Obtiene un hijo del UIElement NOTA: El propósito del siguiente ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p>Todo elemento desplegado en nuestra aplicación de Silverlight pertenece a una estructura jerárquica conocida como el VisualTree. La clase <a href="http://msdn.microsoft.com/es-mx/library/system.windows.media.visualtreehelper.aspx" target="_blank">VisualTreeHelper</a> nos provee de varios métodos para recorrer dicha estructura entre ellos:</p>
<p><span id="more-424"></span></p>
<ul>
<li><a href="http://msdn.microsoft.com/es-mx/library/system.windows.media.visualtreehelper.getchildrencount.aspx" target="_blank">GetChildrenCount</a> – Obtiene el número de Hijos que tiene el UIElement </li>
<li><a href="http://msdn.microsoft.com/es-mx/library/system.windows.media.visualtreehelper.getchild.aspx" target="_blank">GetChild</a> – Obtiene un hijo del UIElement </li>
</ul>
<p><strong>NOTA:</strong> El propósito del siguiente ejemplo es ilustrar el uso del VisualTree. Hay muchas maneras de hacer lo siguiente, como cambiar directamente la fuente de datos para reflejar los cambios en la Interfaz de Usuario. De hecho, si no se usa adecuadamente, el VisualTreeHelper puede hacer nuestra aplicación lenta.</p>
<p>Primero, vamos a usar una clase llamada ListInfo. Esta clase implementa la interfaz <a href="http://msdn.microsoft.com/es-mx/library/system.componentmodel.inotifypropertychanged.aspx" target="_blank">INotifyPropertyChanged</a> y tiene solo dos propiedades: Name y Check. Además cuenta con un método estático llamado getInfo() que devuelve una <a href="http://msdn.microsoft.com/es-mx/library/ms668604.aspx" target="_blank">ObservableCollection</a> de 3 elementos:</p>
<pre class="brush: csharp;">public class ListInfo : INotifyPropertyChanged
{
    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            NotifyPropertyChange(&quot;Name&quot;);
        }
    }

    private bool check;
    public bool Check
    {
        get
        {
            return check;
        }
        set
        {
            check = value;
            NotifyPropertyChange(&quot;Check&quot;);
        }
    }

    public static ObservableCollection&lt;ListInfo&gt; getInfo()
    {
        ObservableCollection&lt;ListInfo&gt; data = new ObservableCollection&lt;ListInfo&gt;();
        data.Add(new ListInfo { Name = &quot;Texto&quot;, Check = true });
        data.Add(new ListInfo { Name = &quot;Qwerty&quot;, Check = false });
        data.Add(new ListInfo { Name = &quot;Asdf&quot;, Check = true });

        return data;
    }

    public void NotifyPropertyChange(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}</pre>
<p>&#160;</p>
<p>A continuación tenemos nuestro XAML, que es un simple ListBox con un ItemTemplate definido:</p>
<pre class="brush: xml;">&lt;StackPanel x:Name=&quot;LayoutRoot&quot;&gt;
    &lt;ListBox x:Name=&quot;myList&quot;
             Width=&quot;450&quot;
             SelectionChanged=&quot;myList_SelectionChanged&quot;&gt;
        &lt;ListBox.ItemTemplate&gt;
            &lt;DataTemplate&gt;
                &lt;StackPanel Orientation=&quot;Horizontal&quot;&gt;
                    &lt;CheckBox IsChecked=&quot;{Binding Check, Mode=TwoWay}&quot;
                              IsEnabled=&quot;True&quot;
                              Content=&quot;{Binding Name, Mode=TwoWay}&quot;
                              Margin=&quot;5,0,0,0&quot; /&gt;
                    &lt;TextBlock Text=&quot;Al cambiar el elemento cambia nuestro CheckBox&quot;
                               Margin=&quot;5,0,0,0&quot;
                               Foreground=&quot;Blue&quot; /&gt;
                &lt;/StackPanel&gt;
            &lt;/DataTemplate&gt;
        &lt;/ListBox.ItemTemplate&gt;
    &lt;/ListBox&gt;
&lt;/StackPanel&gt;</pre>
<p>&#160;</p>
<p>Finalmente, nuestro CodeBehind:</p>
<pre class="brush: csharp;">public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        myList.ItemsSource = ListInfo.getInfo();
    }

    private void myList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListInfo current = myList.SelectedItem as ListInfo;

        List&lt;UIElement&gt; checkBoxes = new List&lt;UIElement&gt;();
        getChildTypes(myList, typeof(CheckBox), ref checkBoxes);

        foreach (UIElement element in checkBoxes)
        {
            CheckBox checkBox = (CheckBox)element;
            if (checkBox.Content.ToString() == current.Name)
            {
                checkBox.IsChecked = !checkBox.IsChecked;
            }
        }
    }

    public void getChildTypes(UIElement parent, Type elementType, ref List&lt;UIElement&gt; items)
    {
        int count = VisualTreeHelper.GetChildrenCount(parent);
        if (count &gt; 0)
        {
            for (int i = 0; i &lt; count; i++)
            {
                UIElement child = VisualTreeHelper.GetChild(parent, i) as UIElement;
                if (child.GetType() == elementType)
                {
                    items.Add(child);
                }
                getChildTypes(child, elementType, ref items);
            }
        }
    }
}</pre>
<p>&#160;</p>
<p>El método que nos interesa es getChildTypes. En este caso le mandamos el padre de los elementos que estamos buscando, en este caso, el ListBox myList. Después el tipo de elementos que queremos que nos regrese, osea, ChecBox. Finalmente le mandamos un valor de referencia de tipo List&lt;UIElement&gt;, en el cuál obtendremos nuestros resultados.</p>
<p>La lógica es sencilla, es un método recursivo que recorre todos los hijos y va agregando a la lista todos los que coindicen con el tipo indicado por elementType.</p>
<p>Pueden ver el resultado <a href="http://demos.jamolina.com/VisualTreeDemo/" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/02/recorriendo-elementos-del-visualtree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/02/recorriendo-elementos-del-visualtree/</feedburner:origLink></item>
		<item>
		<title>Curso gratuito de Silverlight 4</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/XQL-SReaPlU/</link>
		<comments>http://jamolina.com/2010/02/curso-gratuito-de-silverlight-4/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 21:13:50 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 4 Beta]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/02/curso-gratuito-de-silverlight-4/</guid>
		<description><![CDATA[Mi estimado amigo Rodrigo Díaz ha creado un excelente curso introductorio a Silverlight 4. El curso en sí esta hospedado en el canal de Channel9Mexico y empieza aquí. Pero les recomiendo leer el post de Rodrigo acerca del curso. No olviden dejarle retroalimentación acerca del curso. Aquí una lista de los temas (que pueden ver [...]]]></description>
			<content:encoded><![CDATA[<p>Mi estimado amigo <a href="http://rdiazconcha.com" target="_blank">Rodrigo Díaz</a> ha creado un excelente curso introductorio a Silverlight 4. El curso en sí esta hospedado en el canal de <a href="http://channel9.msdn.com/posts/Channel9Mexico/" target="_blank">Channel9Mexico</a> y empieza <a href="http://channel9.msdn.com/posts/Channel9Mexico/Curso-Introduccin-a-Silverlight-4-1-de-13/" target="_blank">aquí</a>. Pero les recomiendo leer <a href="http://rdiazconcha.com/?p=565" target="_blank">el post de Rodrigo acerca del curso</a>. No olviden dejarle retroalimentación acerca del curso.</p>
<p><span id="more-423"></span></p>
<p>Aquí una lista de los temas (que pueden ver en su post arriba mencionado):</p>
<ol>
<p><a href="http://channel9.msdn.com/posts/Channel9Mexico/Curso-Introduccin-a-Silverlight-4-1-de-13/" target="_blank"><font size="4">Introducción</font></a></p>
<p>Introducción y Bienvenida al Curso de Introducción de Silverlight 4 creado por Rodrigo Díaz Concha, MVP de ASP.NET, fundador de La Liga Silverlight, Orador de INETA Latam y Master Instructor del Silverlight Tour para Latinoamérica y España.</p>
<p>Este curso introductorio a Silverlight 4 te permitirá comprender los conceptos básicos y diversas funcionalidades con las que cuenta esta fabulosa plataforma de desarrollo. Esta primera parte del curso consta de 12 videos y 1 práctica que refuerza los conceptos vistos en la serie de screencasts.</p>
<p>Silverlight es una plataforma de desarrollo para construir aplicaciones enriquecidas para Internet (RIA por sus siglas en inglés) que cada vez está siendo más usada como opción tecnológica en aplicativos modernos.</p>
<p>Una confusión que se tiene hoy en día es que se relaciona únicamente a Silverlight con el sistema operativo Windows, pero lejos de eso, las aplicaciones de Silverlight pueden ejecutar en Mac OS, Linux y Windows.</p>
<p>En este screencast veremos una introducción a la plataforma de desarrollo Silverlight, sus herramientas, aplicaciones reales y los requisitos necesarios para poder comenzar a construir aplicaciones con esta tecnología. Para más artículos acerca de Silverlight totalmente en español visita La Liga Silverlight: La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas (<a href="http://blogs.LigaSilverlight.com">http://blogs.LigaSilverlight.com</a>).</p>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Fundamentos-Silverlight-4-2-13/" target="_blank"><strong><font size="4">Fundamentos</font></strong></a>
<p>Una vez instaladas las herramientas de Silverlight para Visual Studio .NET es hora de poner manos a la obra, asimismo es muy importante tener en cuenta algunos conceptos fundamentales acerca de la construcción de soluciones en esta tecnología. En este capítulo veremos conceptos fundamentales en el desarrollo de aplicaciones de Silverlight como las plantillas de Visual Studio .NET, el diseñador, el empaquetado XAP y el hospedaje en la página. Para más artículos acerca de Silverlight totalmente en español visita La Liga Silverlight: La Primera Comunidad MSDN en Español acerca de Silverlight y tecnologías relacionadas (<a href="http://blogs.LigaSilverlight.com">http://blogs.LigaSilverlight.com</a>).</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/XAML-Silverlight-4-3-13/" target="_blank"><strong><font size="4">Xaml</font></strong></a>
<p>Xaml (acrónimo de Extensible Application Markup Language) es el lenguaje de marcación utilizado por Silverlight (y también por su hermano mayor WPF) para poder definir las interfaces de usuario de nuestras aplicaciones.&#160; Toda aplicación de Silverlight implica código de Xaml ligado a código en .NET. Por esta razón en este capítulo veremos conceptos básicos acerca de Xaml, sus elementos básicos y transformaciones.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Animaciones-4-13/" target="_blank"><strong><font size="4">Animaciones</font></strong></a>
<p>Para darle vida a nuestras aplicaciones de Silverlight podemos hacer uso entre otras cosas de las Animaciones. Las Animaciones son un mecanismo para cambiar el valor de las propiedades de los elementos y transformaciones conforme pasa un tiempo determinado. En este capítulo describiremos de manera rápida y sencilla el uso y creación de Animaciones dentro de Silverlight.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Expression-Blend-5-13/" target="_blank"><strong><font size="4">Expression Blend</font></strong></a>
<p>Todo desarrollador de Silverlight debe tener en su cinturón de herramientas Expression Blend, ya que nos ayuda de gran manera a hacer más rápido, efectivo y divertido nuestro trabajo al momento de construir soluciones con la plataforma de desarrollo Silverlight. En este capítulo apreciaremos en conjunto el uso de Expression Blend como herramienta de edición nativa de Xaml&#160; además describiremos las opciones más importantes de la herramienta.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Recursos-y-Estilos-6-13/" target="_blank"><strong><font size="4">Recursos y Estilos</font></strong></a>
<p>Los recursos son un concepto básico para poder crear aplicaciones que reutilicen elementos ya que permiten ser un almacenaje de objetos de cualquier tipo para poder reusar en cualquier parte de nuestras aplicaciones. Los estilos son elementos que podemos&#160; guardar en el diccionario de Recursos para poder aplicarlos y lograr así una apariencia estándar en la aplicación. En este capítulo describiremos el concepto de Recursos y también describiremos la creación y utilización de Estilos para controles y elementos.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Controles-y-Plantillas-7-13/" target="_blank"><strong><font size="4">Controles y Plantillas</font></strong></a>
<p>Silverlight cuenta con una gran cantidad de controles que podemos utilizar en nuestras aplicaciones y la gran mayoría soporta el cambio o modificación de su Plantilla.&#160; En este capítulo mostraremos la manera de cómo cambiar la Plantilla en los controles básicos de Silverlight.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/MediaElement-8-13/" target="_blank"><strong><font size="4">MediaElement</font></strong></a>
<p>Silverlight ha sido utilizado como aplicación cliente en la transmisión de importantes eventos en los últimos meses: la toma de poder de Barack Obama, el Memorial de Michael Jackson, los Juegos Olímpicos de Beijing , etc. Debido a su extraordinaria calidad en la reproducción de audio y video Silverlight está siendo la plataforma favorita para sitios multimedia. En este capítulo veremos la utilización del elemento MediaElement, el cual nos permite reproducir audio y video en nuestros aplicativos y apreciaremos la manera tan sencilla de incorporar esta características en nuestras propias aplicaciones.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Impresin/" target="_blank"><strong><font size="4">Impresión</font></strong></a>
<p>Una de las características más esperadas y solicitadas por la comunidad de Silverlight es el soporte de impresión dentro de las aplicaciones, esto es, la capacidad de poder mandar a imprimir el contenido que estemos viendo en la aplicación ya sea una lista de datos de un DataGrid o ListBox o simplemente tomarle una “foto” a la pantalla y enviarla a papel o alguna de las impresoras virtuales instaladas en nuestros equipos (por ejemplo: OneNote, XPS, PDF, etc.).&#160; Silverlight 4 incluye esta característica a través de un modelo de clases muy sencillo.</p>
<p>En este capítulo mostraremos el uso de la clase PrintDocument para poder crear documentos de impresión a través de nuestras aplicaciones de Silverlight 4.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Webcam-10-13/" target="_blank"><strong><font size="4">Webcam</font></strong></a>
<p>Con la llegada de Silverlight 4 también ha llegado a nosotros la posibilidad de implementar en nuestras aplicaciones la capacidad de tomar video a través de la Webcam y capturar audio por medio del micrófono del equipo.&#160; Este fue una de las peticiones más fuertes en Silverlight 3 y la espera ha terminado.&#160; En este capítulo del curso veremos cómo fácilmente podemos utilizar la Webcam para poder realizar capturas de fotografías con el video.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Drag-and-Drop-11-13/" target="_blank"><strong><font size="4">Drag and Drop</font></strong></a>
<p>Silverlight 4 cuenta con soporte de arrastrar uno o varios archivos desde afuera de la aplicación hacia adentro de ella y soltarlo(s) para poder leer su información y contenido.&#160; Esta característica nos permite como desarrolladores crear mejores Experiencias para los Usuarios ya que evitan el número de cajas de diálogo y clics para abrir o leer un archivo o conjunto de archivos. En este capítulo del curso veremos cómo aplicar esta sencilla pero poderosa funcionalidad en nuestras propias soluciones.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/OpenFileDialog/" target="_blank"><strong><font size="4">OpenFileDialog</font></strong></a>
<p>De manera predeterminada, Silverlight requiere el permiso explícito del usuario para poder leer el Sistema de Archivos ya que ejecuta en Confianza Parcial. La caja de diálogo OpenFileDialog nos brinda un mecanismo para permitir a los usuarios que accedan a sus archivos desde las aplicaciones con Silverlight. En este capítulo del curso describiremos el uso de la caja de diálogo OpenFileDialog para poder leer archivos del equipo del usuario.</p>
</li>
<li><a href="http://channel9.msdn.com/posts/Channel9Mexico/Clic-Derecho-13-13/" target="_blank"><strong><font size="4">Clic Derecho</font></strong></a>
<p>Tradicionalmente al hacer clic derecho sobre una aplicación de Silverlight nos muestra un menú con la opción de abrir la caja de diálogo con información del plugin (como la versión, las cuotas para el almacenamiento aislado, etc.). Ahora en Silverlight 4 podemos capturar el evento de clic derecho del mouse para crear nuestra propia Interface de Usuario y código relacionado. En este capítulo describiremos el manejo de esta característica para poder crear menús contextuales en nuestras aplicaciones de Silverlight.</p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/02/curso-gratuito-de-silverlight-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/02/curso-gratuito-de-silverlight-4/</feedburner:origLink></item>
		<item>
		<title>Trabajando con un navegador en Visual Studio diferente al predeterminado</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/d1KU3zMMoMM/</link>
		<comments>http://jamolina.com/2010/02/trabajando-con-un-navegador-en-visual-studio-diferente-al-predeterminado/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 04:30:18 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/02/trabajando-con-un-navegador-en-visual-studio-diferente-al-predeterminado/</guid>
		<description><![CDATA[Como muchos, a mi no me gusta usar el Internet Explorer mas que para ciertas cosas, como es transacciones bancarias y, más comúnmente, debugear una aplicación. En lo personal, tengo FireFox como mi navegador predeterminado, pero no me gusta debugear con él porque cuando lo cierra, Visual Studio ni se entera entonces tengo que estar [...]]]></description>
			<content:encoded><![CDATA[<p>Como muchos, a mi no me gusta usar el Internet Explorer mas que para ciertas cosas, como es transacciones bancarias y, más comúnmente, debugear una aplicación. En lo personal, tengo FireFox como mi navegador predeterminado, pero no me gusta debugear con él porque cuando lo cierra, Visual Studio ni se entera entonces tengo que estar manualmente presionando el botón de stop.</p>
<p><span id="more-416"></span></p>
<p>Llevaba varios días tratando de encontrar la opción para cambiar el navegador predeterminado de Visual Studio, sabía que era posible porque así lo tengo en la computadora del trabajo, pero en mi computadora personal (que había sido recientemente formateada) nada más no recordaba la opción (revisé tooooodas las opciones de personalización y nada).</p>
<p>Hoy por fin la encontré y aunque para muchos es obvia, la voy a posterar nada más para que cuando se me olvide encontrarla fácil (que es uno de mis principales propósitos de tener este blog).</p>
<p>Paso 1. Dar clic derecho sobre un aspx como Default.aspx y seleccionar Browse with</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/02/image.png" rel="lightbox[416]"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Opciones del menu de contexto de un aspx" border="0" alt="Opciones del menu de contexto de un aspx" src="http://jamolina.com/wp-content/uploads/2010/02/image_thumb.png" width="277" height="480" /></a> </p>
<p>Paso 2. En el cuadro de dialogo, elegir Internet Explorer y dar clic en el botón “Set as Default”</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/02/image1.png" rel="lightbox[416]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Cuadro de dialogo Browse With" border="0" alt="Cuadro de dialogo Browse With" src="http://jamolina.com/wp-content/uploads/2010/02/image_thumb1.png" width="466" height="354" /></a> </p>
<p>Y ¡Listo!. Nada más que dar clic en Cancel y Debugear con otro navegador. </p>
<p>Nota. Por alguna razón, aquí no aparece mi otro navedagor Google Chrome, no estoy seguro a que se deba, si alguien sabe, por favor deje un comentario.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/02/trabajando-con-un-navegador-en-visual-studio-diferente-al-predeterminado/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/02/trabajando-con-un-navegador-en-visual-studio-diferente-al-predeterminado/</feedburner:origLink></item>
		<item>
		<title>Tutoriales del Blend</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/1Npa-BVqp70/</link>
		<comments>http://jamolina.com/2010/01/tutoriales-del-blend/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 18:30:40 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Blend]]></category>
		<category><![CDATA[Rosetta]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/01/tutoriales-del-blend/</guid>
		<description><![CDATA[John Papa publicó un post en el que habla sobre Project Rosetta, si bien el sitio tiene mucho material para gente que está acostumbrada a usar Flash, también puede servir para que un programador de .NET aprenda diferentes conceptos de diseño. Además, el sitio incluye unos tutoriales muy buenos y cortos de Blend. No duden [...]]]></description>
			<content:encoded><![CDATA[<p>John Papa publicó un <a href="http://johnpapa.net/silverlight/hidden-gems-why-net-developers-need-to-take-a-2nd-look-at-project-rosetta/" target="_blank">post</a> en el que habla sobre <a href="http://visitmix.com/labs/rosetta" target="_blank">Project Rosetta</a>, si bien el sitio tiene mucho material para gente que está acostumbrada a usar Flash, también puede servir para que un programador de .NET aprenda diferentes conceptos de diseño. Además, el sitio incluye unos <a href="http://visitmix.com/labs/rosetta/EyesOfBlend/" target="_blank">tutoriales muy buenos y cortos de Blend</a>.</p>
<p><span id="more-409"></span></p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image9.png" rel="lightbox[409]"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb9.png" width="640" height="459" /></a> </p>
<p>No duden en echarle un vistazo.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/01/tutoriales-del-blend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/01/tutoriales-del-blend/</feedburner:origLink></item>
		<item>
		<title>RIA Services en práctica Parte I – Personalizando el diseño</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/_m6gGdEtns4/</link>
		<comments>http://jamolina.com/2010/01/ria-services-en-prctica-parte-i-personalizando-el-diseo/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 16:32:53 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[RIA Services]]></category>
		<category><![CDATA[Silverlight 4 Beta]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2010/01/ria-services-en-prctica-parte-i-personalizando-el-diseo/</guid>
		<description><![CDATA[WCF RIA Services es una excelente herramienta que podemos utilizar en Silverlight para manejar nuestro acceso a datos. Si aún no te has introducido en el tema, te recomiendo echar un vistazo a la serie de posts sobre RIA Services de Jorge Levy sobre el tema. Esta serie de posts pretende ser un poco menos [...]]]></description>
			<content:encoded><![CDATA[<p>WCF RIA Services es una excelente herramienta que podemos utilizar en Silverlight para manejar nuestro acceso a datos. Si aún no te has introducido en el tema, te recomiendo echar un vistazo a la <a href="http://www.jorgelevy.com/?p=47" target="_blank">serie de posts sobre RIA Services</a> de <a href="http://jorgelevy.com" target="_blank">Jorge Levy</a> sobre el tema.</p>
<p><span id="more-400"></span></p>
<p>Esta serie de posts pretende ser un poco menos introductoria y más enfocada a hacer una aplicación real, pero sencilla.</p>
<p>Vamos a realizar una aplicación para ayudar en un intercambio de regalos (si, este post llega un poco tarde, pero por lo menos espero que sea ilustrativo).</p>
<p><strong>NOTA: Aunque este ejemplo estará hecho en Visual Studio 2010 beta 2 + SL4 Tools Beta, la mayoría de las cosas puede ser hecha en VS2008 SP1 con WCF RIA Services Beta. En caso contrario, se hará notar para evitar confusiones.</strong></p>
<p>Lo primero que debemos hacer es crear una nueva aplicación de tipo Silverlight Business Application, la cual nombraremos “Intercambios”:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb.png" border="0" alt="image" width="500" height="359" /></a></p>
<p>Si corremos nuestro proyecto tal y como está, obtenemos el template base de RIA Services:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image1.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb1.png" border="0" alt="image" width="500" height="344" /></a></p>
<p>Ahora, vamos a personalizar un poco nuestro proyecto. Para esto iremos a la <a href="http://gallery.expression.microsoft.com" target="_blank">Galería de Microsoft Expression</a>, en donde buscaremos un tema para nuestra aplicación. Nuestro tema será <a href="http://gallery.expression.microsoft.com/en-us/riathemelimeshocker" target="_blank">Lime Shocker</a> de <a href="http://timheuer.com/" target="_blank">Tim Heuer</a>.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image2.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb2.png" border="0" alt="image" width="500" height="338" /></a></p>
<p>Bajamos el tema y extraemos los archivos en un directorio de nuestra elección. A continuación, buscamos en nuestro proyecto la carpeta Assets (en este caso <em>Intercambios\Intercambios\Assets</em>) y renombramos el archivo <em>Styles.xaml </em>(por ejemplo: <em>Styles.xaml.old</em>) y finalmente copiamos el que descargamos. Si volvemos a correr nuestro proyecto, ahora obtenemos algo como esto:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image3.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb3.png" border="0" alt="image" width="500" height="346" /></a></p>
<p>Ahora, debido a que Shock Limer fue hecho para una versión anterior de RIA Services, debemos de cambiar un par de cosas en nuestro Styles.xaml. Primero, debemos agregar a las nuestras referencias (al inicio del archivo) la siguiente linea:</p>
<pre class="csharpcode">xmlns:loginWindow=<span class="str">"clr-namespace:Intercambios.LoginUI"</span></pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>Después tenemos que encontrar el estilo encabezado con el comentario “&lt;!&#8211; LoginRegistration Window Style –&gt;” y reemplazarlo por el de nuestro archivo Styles.xaml.old (osea, nuestro archivo original). Esto debido a unos estados nuevos incluídos en esta versión de WCF RIA Services.</p>
<p>Vamos a personalizar un poco el tema, para que luzca un poco más navideño (o cualqueir otra festividad que se ajuste más a la época en que nos encontremos). Abrimos nuestro proyecto en Blend Preview for .NET 4 (o Blend 3 esta bien si estan trabajando en VS2008). y con nuestro MainPage.xaml abierto abrimos el panel de Resources. Vamos a modificar dos de nuestras brochas: NavigationBackgroundColorBrush y HighLightColorBrush a Rojo y un Verde más obscuro respectivamente:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image4.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb4.png" border="0" alt="image" width="500" height="358" /></a></p>
<p>Ahora agregamos un par de imagenes al proyecto, un árbol de navidad para nuestra página de bienvenida y unos bastones de caramelo para decorar un poco nuestro borde:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image5.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb5.png" border="0" alt="image" width="500" height="350" /></a></p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image6.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb6.png" border="0" alt="image" width="500" height="340" /></a></p>
<p>Regresamos a Visual Studio. Dentro de la carpeta de Assets, hay otra que se llama Resources, y ahí encontramos un archivo de recursos llamado ApplicationStrings.resx. Este archivo nos permite personalizar distintos textos que aparecen en nuestra aplicación. Vamos a dejarlo algo así:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image7.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb7.png" border="0" alt="image" width="500" height="277" /></a></p>
<p>Corremos nuestro proyecto y obtenemos algo como esto:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2010/01/image8.png" rel="lightbox[400]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2010/01/image_thumb8.png" border="0" alt="image" width="500" height="304" /></a></p>
<p>Puedes descargar el proyecto <a href="http://jamolina.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38431" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2010/01/ria-services-en-prctica-parte-i-personalizando-el-diseo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2010/01/ria-services-en-prctica-parte-i-personalizando-el-diseo/</feedburner:origLink></item>
		<item>
		<title>Ocultando las líneas del control Chart</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/KICIUEA3V4A/</link>
		<comments>http://jamolina.com/2009/12/ocultando-las-lneas-del-control-chart/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 22:58:56 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Chart]]></category>
		<category><![CDATA[Silverlight Toolkit]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/12/ocultando-las-lneas-del-control-chart/</guid>
		<description><![CDATA[El control Chart, incluído en el Silverlight Toolkit, nos permite mostrar datos de forma gráfica. Recientemente mi amigo Jorge Levy tuvo la necesidad de hacer una gráfica de barras sin las líneas de fondo mostradas por default: Resultó que esto es algo muy sencillo de hacer, pero no tan obvio: &#60;chartingToolkit:Chart Margin=&#34;109,62,116,64&#34; Title=&#34;Chart Title&#34;&#62; &#60;chartingToolkit:Chart.Axes&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>El control Chart, incluído en el <a href="http://silverlight.codeplex.com" target="_blank">Silverlight Toolkit</a>, nos permite mostrar datos de forma gráfica. Recientemente mi amigo <a href="http://jorgelevy.com" target="_blank">Jorge Levy</a> tuvo la necesidad de hacer una gráfica de barras sin las líneas de fondo mostradas por default:</p>
<p><span id="more-381"></span></p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/12/image.png" rel="lightbox[381]"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Gráfica de barras con líneas horizontales" border="0" alt="Gráfica de barras con líneas horizontales" src="http://jamolina.com/wp-content/uploads/2009/12/image_thumb.png" width="240" height="206" /></a> </p>
<p>Resultó que esto es algo muy sencillo de hacer, pero no tan obvio:</p>
<pre class="brush: xml;">&lt;chartingToolkit:Chart Margin=&quot;109,62,116,64&quot;
                       Title=&quot;Chart Title&quot;&gt;
    &lt;chartingToolkit:Chart.Axes&gt;
        &lt;chartingToolkit:LinearAxis Orientation=&quot;Y&quot;
                                    ShowGridLines=&quot;False&quot; /&gt;
    &lt;/chartingToolkit:Chart.Axes&gt;
    &lt;chartingToolkit:Chart.DataContext&gt;
        &lt;PointCollection&gt;
            &lt;Point&gt;1,10&lt;/Point&gt;
            &lt;Point&gt;2,20&lt;/Point&gt;
            &lt;Point&gt;3,30&lt;/Point&gt;
            &lt;Point&gt;4,40&lt;/Point&gt;
        &lt;/PointCollection&gt;
    &lt;/chartingToolkit:Chart.DataContext&gt;
    &lt;chartingToolkit:ColumnSeries DependentValuePath=&quot;X&quot;
                                  IndependentValuePath=&quot;Y&quot;
                                  ItemsSource=&quot;{Binding}&quot; /&gt;
&lt;/chartingToolkit:Chart&gt;</pre>
</p>
<p>&#160;</p>
<p>Aquí podemos observar que de la línea 3 a la 6 definimos la propiedad <strong><em>Axes</em></strong> de nuestro control <strong><em>Chart</em></strong>. Estamos indicando que tendremos un <strong><em>LinearAxis</em></strong> con orientación “Y” (las líneas muestran los valores para los datos en dicho eje) y definimos <strong><em>ShowGridLines</em></strong> como falso para evitar que aparezcan. El resultado es:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/12/image1.png" rel="lightbox[381]"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Gráfica de barras sin líneas horizontales" border="0" alt="Gráfica de barras sin líneas horizontales" src="http://jamolina.com/wp-content/uploads/2009/12/image_thumb1.png" width="240" height="206" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/12/ocultando-las-lneas-del-control-chart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/12/ocultando-las-lneas-del-control-chart/</feedburner:origLink></item>
		<item>
		<title>Webcast: SketchFlow</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/7tZZUkG_tps/</link>
		<comments>http://jamolina.com/2009/11/webcast-sketchflow/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 18:03:19 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SketchFlow]]></category>
		<category><![CDATA[Webcast]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/11/webcast-sketchflow/</guid>
		<description><![CDATA[Esta coordialmente invitados al próximo webcast de la Liga Silverlight. En esta ocasión, su servidor hablará acerca de SketchFlow, esta gran herramienta que nos permite hacer bosquejos o mockups 100% funcionables y reutilizables de nuestras aplicaciones. &#160; Tema: SketchFlow Fecha: 19 de Noviembre 2009 Hora: 6:30 &#8211; 7:30PM (-6 GMT) Orador: Arturo Molina Regístrate aquí.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.ligasilverlight.com" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="LogoLigaSilverlight" border="0" alt="LogoLigaSilverlight" align="left" src="http://jamolina.com/wp-content/uploads/2009/11/LogoLigaSilverlight.gif" width="95" height="109" /></a>Esta coordialmente invitados al próximo webcast de la Liga Silverlight. En esta ocasión, su servidor hablará acerca de SketchFlow, esta gran herramienta que nos permite hacer bosquejos o mockups 100% funcionables y reutilizables de nuestras aplicaciones. </p>
<p><span id="more-375"></span></p>
<p>&#160;</p>
<p><strong>Tema:</strong> SketchFlow</p>
<p><strong>Fecha:</strong> 19 de Noviembre 2009</p>
<p><strong>Hora:</strong> 6:30 &#8211; 7:30PM (-6 GMT)</p>
<p><strong>Orador:</strong> Arturo Molina</p>
<p><a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032427441&amp;EventCategory=2&amp;culture=es-MX&amp;CountryCode=MX" target="_blank">Regístrate aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/11/webcast-sketchflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/11/webcast-sketchflow/</feedburner:origLink></item>
		<item>
		<title>Webcast: Silverlight Toolkit Parte 2</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/Iowyw581k4Y/</link>
		<comments>http://jamolina.com/2009/11/webcast-silverlight-toolkit-parte-2/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:59:44 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight Toolkit]]></category>
		<category><![CDATA[Webcast]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/11/webcast-silverlight-toolkit-parte-2/</guid>
		<description><![CDATA[Los invito a todos al Webcast que se llevará a cabo el día de mañana a las 6:30 de la tarde. Este Webcast continuará con el tema del Silverlight Toolkit, esta  vez conoceremos a detalle controles que nos dan una gran funcionalidad con muy poco código: El DataGrid y el DataForm. También tocaremos un poco [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.ligasilverlight.com" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="LogoLigaSilverlight" src="http://jamolina.com/wp-content/uploads/2009/11/LogoLigaSilverlight.gif" border="0" alt="LogoLigaSilverlight" width="95" height="109" align="left" /></a>Los invito a todos al Webcast que se llevará a cabo el día de mañana a las 6:30 de la tarde. Este Webcast continuará con el tema del Silverlight Toolkit, esta  vez conoceremos a detalle controles que nos dan una gran funcionalidad con muy poco código: El DataGrid y el DataForm. También tocaremos un poco el tema de la nueva versión recién liberada el pasado 19 de octubre, específicamente, la funcionalidad Drag and Drop en el DataGrid.</p>
<p><span id="more-367"></span></p>
<p><strong>Tema:</strong> Silverlight Toolkit Parte II</p>
<p><strong>Fecha:</strong> 05 de Noviembre 2009</p>
<p><strong>Hora:</strong> 6:30 &#8211; 7:30PM (-6 GMT)</p>
<p><strong>Orador:</strong> Arturo Molina</p>
<p><a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032427440&amp;EventCategory=2&amp;culture=es-MX&amp;CountryCode=MX" target="_blank">Regístrate aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/11/webcast-silverlight-toolkit-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/11/webcast-silverlight-toolkit-parte-2/</feedburner:origLink></item>
		<item>
		<title>Cargando un Assembly dinámicamente</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/BuyGumHP1yk/</link>
		<comments>http://jamolina.com/2009/09/cargando-un-assembly-dinmicamente/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 21:17:08 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[interface]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/09/cargando-un-assembly-dinmicamente/</guid>
		<description><![CDATA[Hace tiempo tuve la necesidad de cargar dinámicamente una DLL. Esto puede tener muchas aplicaciones como tener una entrada en un archivo de cofiguración para poder elegir entre usar una clase u otra. Dichas clases podría por ejemplo, implementar diferentes formas de hacer una tarea específica. class Program { static void Main(string[] args) { string [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo tuve la necesidad de cargar dinámicamente una DLL. Esto puede tener muchas aplicaciones como tener una entrada en un archivo de cofiguración para poder elegir entre usar una clase u otra. Dichas clases podría por ejemplo, implementar diferentes formas de hacer una tarea específica.<span id="more-363"></span></p>
<pre class="brush: csharp;">class Program
{
    static void Main(string[] args)
    {
        string className = "Tester.SpanishGreeter";

        Assembly assembly = Assembly.GetExecutingAssembly();

        object o = assembly.CreateInstance(className);

        IGreeter test = (IGreeter)o;
        test.sayHello();
        Console.ReadLine();
    }
}

interface IGreeter
{
    void sayHello();
}

class SpanishGreeter : IGreeter
{
    public void sayHello()
    {
        Console.WriteLine("Hola");
    }
}

class EnglishGreeter : IGreeter
{
    public void sayHello()
    {
        Console.WriteLine("Hello");
    }
}

class DanishGreeter : IGreeter
{
   public void sayHello()
   {
       Console.WriteLine("Hej");
   }
}
</pre>
<p>Fácilmente el nombre de la clase lo podríamos obtener de una entrada del usuario, archivo de configuración o base de datos. Después obtenemos el ensamblado que se está ejecutando actualmente, de ahí podemos crear una instancia de <strong><em>object</em></strong> llamando al método <strong><em>CreateInstance()</em></strong> y enviando el nombre de la clase (namespace incluído). De ahí todo lo que tenemos que hacer es castear el objecto a nuestra clase y ¡Listo! Podemos hacer uso de cualquiera de nuestras implementaciones de la interfaz IGreeter.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/09/cargando-un-assembly-dinmicamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/09/cargando-un-assembly-dinmicamente/</feedburner:origLink></item>
		<item>
		<title>El programa WebSite Spark</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/wmS8HfRsbuc/</link>
		<comments>http://jamolina.com/2009/09/el-programa-website-spark/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 14:58:26 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Blend]]></category>
		<category><![CDATA[Expression Studio]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WebSite Spark]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/09/el-programa-website-spark/</guid>
		<description><![CDATA[Hace unas horas Scott Gu anunció el WebSite Spark. Este programa está diseñado para apoyar a desarrolladores y diseñadores a obtener software y recursos de Microsoft sin costo alguno durante tres años. El programa incluye: 3 licencias de Visual Studio 2008 Professional Edition 1 licencia de Epression Studio 3 (Incluyendo Blend, Sketchflow y Web) 2 [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unas horas Scott Gu <a href="http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx" target="_blank">anunció el WebSite Spark</a>. Este programa está diseñado para apoyar a desarrolladores y diseñadores a obtener software y recursos de Microsoft sin costo alguno durante tres años. El programa incluye:<span id="more-339"></span></p>
<ul>
<li>3 licencias de Visual Studio 2008 Professional Edition</li>
<li>1 licencia de Epression Studio 3 (Incluyendo Blend, Sketchflow y Web)</li>
<li>2 licencias de Expression Web 3</li>
<li>4 licencias por procesador de Windows Web Server 2008 R2</li>
<li>4 licencias pro procesador de SQL Server 2008 Web Edition</li>
<li>Panel de Control DotNetPanel</li>
</ul>
<p>Las licencias de Windows Server y SQL Sever pueden usarse tanto para ambientes de desarrollo como de producción.</p>
<p>Todo lo que necesitan es ser desarrolladores independientes o ser una compañía de 10 o menos empleados.</p>
<p>Después de 3 años, no tiene olbigación alguna de pagar el software, solo un cargo de $100 dlls al final del programa. Si deciden seguir en el programa, este tendrá un costo de $999 dlls por año. Alternativamente, pueden quedarse sólo con las licencias de producción (una de Windows Web Server y otra de SQL Server) por $199 dlls al año.</p>
<p>Para enrolarse solo necesitan entrar a la <a href="http://www.microsoft.com/web/websitespark/" target="_blank">página del programa</a> en donde se les solicitará unos datos sobre su compañía y un referal code que pueden solicitar a <a title="webspark@microsoft.com" href="mailto:webspark@microsoft.com">webspark@microsoft.com</a></p>
<p>No lo duden más y ¡<a href="http://www.microsoft.com/web/websitespark/WebPro/Signup.aspx" target="_blank">enrólense</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/09/el-programa-website-spark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/09/el-programa-website-spark/</feedburner:origLink></item>
		<item>
		<title>Applicaciones fuera del navegador</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/K_bxzXgqTtE/</link>
		<comments>http://jamolina.com/2009/09/applicaciones-fuera-del-navegador/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 22:08:38 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[OOB]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/09/applicaciones-fuera-del-navegador/</guid>
		<description><![CDATA[Este post está basado en un video tutorial de Tim Heur titulado Out-of-browser Experiences. Lo primero que vamos a hacer es diseñar la interfaz de nuestra aplicacción. Esta puede ser tan sencilla como quieran, por lo menos necesitamos 2 TextBlock y un Button (liga al código al final del post): Los TextBlock en los que [...]]]></description>
			<content:encoded><![CDATA[<p>Este post está basado en un video tutorial de <a href="http://timheuer.com/" target="_blank">Tim Heur</a> titulado <a href="http://www.silverlight.net/learn/videos/silverlight-videos/out-of-browser-experiences/" target="_blank">Out-of-browser Experiences</a>.</p>
<p><span id="more-328"></span></p>
<p>Lo primero que vamos a hacer es diseñar la interfaz de nuestra aplicacción. Esta puede ser tan sencilla como quieran, por lo menos necesitamos 2 TextBlock y un Button (liga al código al final del post):</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image5.png" rel="lightbox[328]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/09/image_thumb5.png" border="0" alt="image" width="359" height="301" /></a></p>
<p>Los TextBlock en los que estamos interesados por el momento son los que en la imagen vemos con la palabra “NO” en rojo. Uno lo llamaremos txtOOB que indicará si la aplicación se encuentra fuera del navegador y el otro txtConexion que indicará si la aplicación cuenta con conexión disponible.</p>
<p>A continuación, vamos a crear un pequeño método para ayudarnos a cambiar el estado de dichos TextBlock.</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> cambiaEstado(TextBlock texto, <span style="color: #0000ff;">bool</span> estado)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">if</span> (estado)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        texto.Text = <span style="color: #006080;">"Si"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        texto.Foreground = <span style="color: #0000ff;">new</span> SolidColorBrush(Colors.Green);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        texto.Text = <span style="color: #006080;">"No"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        texto.Foreground = <span style="color: #0000ff;">new</span> SolidColorBrush(Colors.Red);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
</div>
</div>
<p>Este método nos permite mandar el TextBlock correspondiente y el valor que le será asignado. Si es verdadero, entonces el TextBlock mostrará la palabra “Si” en verde, si es falso, mostrará la palabra “No” en rojo.</p>
<p>Para la siguiente función declaramos el nombre de espacio <strong><em>System.Net.NetworkInformation</em></strong>. Aquí está contenida la clase NetworkInterface que nos permitirá saber si tenemos una conexión disponible:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ActualizarEstados()</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    cambiaEstado(txtOOB, App.Current.IsRunningOutOfBrowser);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    cambiaEstado(txtConexion, NetworkInterface.GetIsNetworkAvailable());</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
</div>
</div>
<p>Podemos ver GetIsNetworkAvailable() nos regresa un booleano indicando el estado de la conexión. Además, la propiedad App.Current.IsRunningOutOfBrowser nos indica si la aplicación está corriendo fuera del navegador. Solo necesitamos añadir la llamada a ActualizarEstados() en el constructor de nuestra clase MainPage. Al ejecutar nuestra aplicación vemos lo siguiente:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image6.png" rel="lightbox[328]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/09/image_thumb6.png" border="0" alt="image" width="428" height="442" /></a></p>
<p>Ahora pasamos a la funcionalidad del botón. Queremos dos cosas: primero crearemos una función que inicialice el botón, dependiendo de si la aplicación está o no fuera del navegador y si está o nó instalada. Segundo, programaremos la funcionalidad de dicho botón, también en función de si está o no fuera del navegador. Veamos primero el método de inicialización:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> inicializarBoton()</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">if</span> (App.Current.IsRunningOutOfBrowser)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        btnAccion.Content = <span style="color: #006080;">"Actualizar"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        <span style="color: #0000ff;">if</span> (App.Current.InstallState == InstallState.NotInstalled)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">            btnAccion.Content = <span style="color: #006080;">"Instalar"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        <span style="color: #0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">            btnAccion.Content = <span style="color: #006080;">"Aplicación instalada"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">            btnAccion.IsEnabled = <span style="color: #0000ff;">false</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        }</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
</div>
</div>
<p>El primer if determina si la aplicación está fuera del navegador, de ser así, el botón simplemente muestra “Actualizar”. Si estamos dentro del navegador, entonces debemos determinar si la aplicación está o no instalada, si no es así, el botón despliega el mensaje “Instalar” y si ya está instalada, mostramos “Aplicación Instalada” y deshabilitamos el botón para evitar una posible excepción. Este método lo mandamos a llamar también en el constructor y además agregamos el un manejador del evento clic:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">public</span> MainPage()</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #008000;">// Required to initialize variables</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    InitializeComponent();</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    btnAccion.Click += <span style="color: #0000ff;">new</span> RoutedEventHandler(btnAccion_Click);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    NetworkChange.NetworkAddressChanged += <span style="color: #0000ff;">new</span> NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    ActualizarEstados();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    inicializarBoton();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
</div>
</div>
<p>Aquí además agregamos un manejador al evento NetworkAddressChanged, con el propósito de actualizar el txtConexion. Y ahora, el código de los manejadores de eventos:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">void</span> btnAccion_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">if</span> (App.Current.IsRunningOutOfBrowser)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        App.Current.CheckAndDownloadUpdateCompleted += <span style="color: #0000ff;">new</span> CheckAndDownloadUpdateCompletedEventHandler(Current_CheckAndDownloadUpdateCompleted);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        App.Current.CheckAndDownloadUpdateAsync();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        App.Current.Install();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">void</span> Current_CheckAndDownloadUpdateCompleted(<span style="color: #0000ff;">object</span> sender, CheckAndDownloadUpdateCompletedEventArgs e)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">if</span> (e.UpdateAvailable)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        MessageBox.Show(<span style="color: #006080;">"La applicación ha sido actualizada, por favor reinicia"</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">        MessageBox.Show(<span style="color: #006080;">"No hay actualizaciones disponibles"</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">void</span> NetworkChange_NetworkAddressChanged(<span style="color: #0000ff;">object</span> sender, EventArgs e)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    cambiaEstado(txtConexion, NetworkInterface.GetIsNetworkAvailable());</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">}</pre>
<p><!--CRLF--></p>
</div>
</div>
<p>Si la aplicación está dentro del navedador (código en el bloque else) llamamos al método Install(). Cabe mencionar que este método solo funciona cuando es causado por una acción del usuario, si ustedes lo ponen en el constructor por ejemplo, no funcionará. Si la aplicación ya se encuentra fuera del navegador, entonces procedemos a checar si hay actualizaciones disponibles. Primero añadimos un manejador al evento CheckAndDownloadUpdateCompleted y después mandamos a llamar CheckAndDownloadUpdateAsync(). Éste método va y revisa si hay actualizaciones, si las hay las descarga y las instala cuando la aplicación es reiniciada.</p>
<p>En el manejador del evento de CheckAndDownloadUpdateCompleted revisamos nuestro parámetro de tipo CheckAndDownloadUpdateCompletedEventArgs para ver si hay una actualización disponible. Si la hay mostramos un cuadro de dialogo pidiendo al usuario que reinicie para que se instale la nueva versión.</p>
<p>Por cuestiones de ilustración, este demo tiene la funcionalidad de revisar actualizaciones incluída en una acción de un botón. En una aplicación de verdad, quizá sería prudente hacerlo en el constructor de nuestra clase App por ejemplo.</p>
<p>Finalmente el manejador de NetworkAddressChanged simplemente tiene que mandar a llamar a nuestro primer método para revisar si la conexión está disponible.</p>
<p>¡Nuestra aplicación está casi lista! Solo nos queda habilitarla para instalarla fuera del navegador. Para esto nos vamos a las propiedades de nuestro proyecto, nos aseguramos de que <strong><em>Enable running application out of the browser </em></strong>y damos clic en el botón <strong><em>Out-of-Browser Settings</em></strong>:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image61.png" rel="lightbox[328]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/09/image6_thumb.png" border="0" alt="image" width="640" height="464" /></a></p>
<p>Aparecerá un cuadro de dialogo donde podemos definir distintas cosas:</p>
<ul>
<li><span style="background-color: #ffffff;"><strong>Window Title:</strong> El título de la ventana de la aplicación</span></li>
<li><span style="background-color: #ffffff;"><strong>Width y Heigh:</strong> Ancho y Alto de la ventana</span></li>
<li><span style="background-color: #ffffff;"><strong>Shortcut name:</strong> Nombre que llevará el acceso directo</span></li>
<li><span style="background-color: #ffffff;"><strong>Download description: </strong>Texto que se mostrará en un tooltip al posicionar el cursor sobre el acceso directo de la aplicación.</span></li>
<li><span style="background-color: #ffffff;"><strong>Icons:</strong> Imágenes que harán de ícono de la aplicación (deben ser parte del proyecto de la aplicación de Silverlight)</span></li>
</ul>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image8.png" rel="lightbox[328]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/09/image_thumb8.png" border="0" alt="image" width="509" height="517" /></a></p>
<p>Una vez que llenamos la información que queremos se genera un arhivo xml (dentro de la carpeta de propiedades del proyecto) llamado OutOfBrowserSettings.xml, el cúal es muy sencillo y hasta podemos editarlo manualmente (aunque el cuadro de dialogo es más cómodo).</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OutOfBrowserSettings</span> <span style="color: #ff0000;">ShortName</span><span style="color: #0000ff;">="OOB Demo"</span> <span style="color: #ff0000;">EnableGPUAcceleration</span><span style="color: #0000ff;">="False"</span> <span style="color: #ff0000;">ShowInstallMenuItem</span><span style="color: #0000ff;">="True"</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OutOfBrowserSettings.Blurb</span><span style="color: #0000ff;">&gt;</span>Demo de aplicación fuera del navegador. JAMolina.com<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OutOfBrowserSettings.Blurb</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OutOfBrowserSettings.WindowSettings</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">WindowSettings</span> <span style="color: #ff0000;">Title</span><span style="color: #0000ff;">="OOB Demo"</span> <span style="color: #ff0000;">Height</span><span style="color: #0000ff;">="250"</span> <span style="color: #ff0000;">Width</span><span style="color: #0000ff;">="300"</span> <span style="color: #0000ff;">/&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OutOfBrowserSettings.WindowSettings</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OutOfBrowserSettings.Icons</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Icon</span> <span style="color: #ff0000;">Size</span><span style="color: #0000ff;">="16,16"</span><span style="color: #0000ff;">&gt;</span>Icons/Logo16.png<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Icon</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Icon</span> <span style="color: #ff0000;">Size</span><span style="color: #0000ff;">="32,32"</span><span style="color: #0000ff;">&gt;</span>Icons/Logo32.png<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Icon</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Icon</span> <span style="color: #ff0000;">Size</span><span style="color: #0000ff;">="48,48"</span><span style="color: #0000ff;">&gt;</span>Icons/Logo48.png<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Icon</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Icon</span> <span style="color: #ff0000;">Size</span><span style="color: #0000ff;">="128,128"</span><span style="color: #0000ff;">&gt;</span>Icons/Logo128.png<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Icon</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OutOfBrowserSettings.Icons</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OutOfBrowserSettings</span><span style="color: #0000ff;">&gt;</span></pre>
<p><!--CRLF--></p>
</div>
</div>
<p>¡Listo! Nuestra aplicación está lista. Para probar la funcionalidad de actualización pueden barjarse el proyecto para correrla localmente, instalarla y luego modificar algún valor (por ejemplo, algún valor del XAML de la interfaz), compilan y abren la aplicación previamente instalada para probar la actualización.</p>
<p>El resto de la funcionalidad puede ser probada con el demo que pueden encontrar <a href="http://demos.jamolina.com/OOBDemo/" target="_blank">aquí</a>. El código fuente lo pueden descargar de <a href="http://jamolina.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32850" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/2009/09/applicaciones-fuera-del-navegador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/2009/09/applicaciones-fuera-del-navegador/</feedburner:origLink></item>
	</channel>
</rss>

