<?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>Tue, 07 Sep 2010 04:04:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.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>Arcade Fire y el poder de html5</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/-XcwyUg42fw/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/09/arcade-fire-y-el-poder-de-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/JWGIgTg8bdk/</link>
		<comments>http://jamolina.com/index.php/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>
<table>
<tbody>
<tr>
<td style="font-weight: bold;">Fecha:</td>
<td>29 de septiembre</td>
</tr>
<tr>
<td style="font-weight: bold;">Hora:</td>
<td>18:30</td>
</tr>
<tr>
<td style="font-weight: bold; vertical-align: text-top;">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" src="http://jamolina.com/wp-content/uploads/2010/09/KodiakMx2-150x150.png" alt="" 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" src="http://jamolina.com/wp-content/uploads/2010/09/DSC04644-150x150.jpg" alt="" 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" src="http://jamolina.com/wp-content/uploads/2010/09/tar-150x150.jpg" alt="" 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/index.php/2010/09/evento-conoce-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/kKsvZ9eKoM0/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/09/actualizacin-de-silverlight-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/iDlQdKLdGv0/</link>
		<comments>http://jamolina.com/index.php/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/index.php/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/index.php/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/8trBGW0kKw4/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/08/taller-de-silverlight-4-gratuito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/oKwMQx6SsvI/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/08/asp-net-mvc3-preview-1-introduccin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/ooOCpJ-Wan8/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/07/stackoverflow-en-espaol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/lTxAGVjxzbU/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/04/intellisense-con-jquery-1-4-2-en-visual-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/mqaTr7y8pqE/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/04/evento-de-lanzamiento-de-visual-studio-2010-gracias/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/gD2d5FeZ1E8/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/04/probando-la-windows-phone-7-hoy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/zw2zU08VwvE/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/04/evento-de-lanzamiento-visual-studio-2010-y-windows-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/eX8DSrbyu78/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/03/silverlight-4-release-candidate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/9ab8sayVanw/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/03/hola-windows-phone-7-series/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/iR3el8gaIEo/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/03/photosynth-en-nuestra-app-de-silverlight/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/7EIDsxKmvfc/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/02/recorriendo-elementos-del-visualtree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/GUZAOlCFkag/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/02/curso-gratuito-de-silverlight-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/DRTKkuzFl3w/</link>
		<comments>http://jamolina.com/index.php/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/index.php/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/index.php/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/-TlZbTwTn1M/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/01/tutoriales-del-blend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/L6apmMVBf6k/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2010/01/ria-services-en-prctica-parte-i-personalizando-el-diseo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/O5jh5n4NJkw/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/12/ocultando-las-lneas-del-control-chart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/12/ocultando-las-lneas-del-control-chart/</feedburner:origLink></item>
		<item>
		<title>Webcast: SketchFlow</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/9hg5pbpZT-Q/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/11/webcast-sketchflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/11/webcast-sketchflow/</feedburner:origLink></item>
		<item>
		<title>Webcast: Silverlight Toolkit Parte 2</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/jORdOjj_r-w/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/11/webcast-silverlight-toolkit-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/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/hQuV5uK9YTM/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/09/cargando-un-assembly-dinmicamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/09/cargando-un-assembly-dinmicamente/</feedburner:origLink></item>
		<item>
		<title>El programa WebSite Spark</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/mAl0eZ00meI/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/09/el-programa-website-spark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/09/el-programa-website-spark/</feedburner:origLink></item>
		<item>
		<title>Applicaciones fuera del navegador</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/DEa6Sx1l4LA/</link>
		<comments>http://jamolina.com/index.php/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/index.php/2009/09/applicaciones-fuera-del-navegador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/09/applicaciones-fuera-del-navegador/</feedburner:origLink></item>
		<item>
		<title>Tip: Arreglando tu XAML</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/CXrGYMxHw2w/</link>
		<comments>http://jamolina.com/index.php/2009/09/tip-arreglando-tu-xaml/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 16:45:02 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/09/tip-arreglando-tu-xaml/</guid>
		<description><![CDATA[Una de las cosas que más me frustraba de programar en Silverlight era lidiar con el XAML. Y no me refiero a escribirlo, sino ordenarlo. Un tag con muchas propiedades puede convertirse en algo muy feo y difícil de analizar cuando estas buscando errores o una propiedad en particular. Leyendo o viendo un video de [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas que más me frustraba de programar en Silverlight era lidiar con el XAML. Y no me refiero a escribirlo, sino ordenarlo. Un tag con muchas propiedades puede convertirse en algo muy feo y difícil de analizar cuando estas buscando errores o una propiedad en particular.</p>
<p><span id="more-314"></span></p>
<p>Leyendo o viendo un video de <a href="http://silverlight.net/blogs/jesseliberty/default.aspx" target="_blank">Jesse Liberty</a> (lo siento, no recuerdo donde fué) descubrí una opción fantástica dentro de Visual Studio. Para activarla pueden entrar a <em><strong>Tools –&gt; Options</strong></em> (Lo siento, solo tengo el VS en inglés).</p>
<p>Una vez dentro bajan por las siguientes categorías: <strong><em>Text Editor –&gt; XAML –&gt; Formatting –&gt; Spacing</em></strong> y seleccionan la opción <strong><em>Position each attribute on a separate line</em></strong>:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image.png" rel="lightbox[314]"><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/image_thumb.png" border="0" alt="image" width="640" height="378" /></a></p>
<p>Además, pueden eligir cuando quieren que el auto-formato se active:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image1.png" rel="lightbox[314]"><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/image_thumb1.png" border="0" alt="image" width="633" height="377" /></a></p>
<p>Para XAML existente pueden usar la opción de copiar y pegar todo el código y el IDE se encargará de darle el formato deseado, o pueden usar la herramienta de formato incluída en la barra <strong><em>HTML Source Editing</em></strong>:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image2.png" rel="lightbox[314]"><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/image_thumb2.png" border="0" alt="image" width="402" height="66" /></a></p>
<p>De esta forma podemos cambiar algo como esto:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image3.png" rel="lightbox[314]"><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/image_thumb3.png" border="0" alt="image" width="937" height="364" /></a></p>
<p>A algo como esto:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/09/image4.png" rel="lightbox[314]"><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/image_thumb4.png" border="0" alt="image" width="953" height="500" /></a></p>
<p>¿Más leible no creen?</p>
<p>Espero que les sea de utilidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/index.php/2009/09/tip-arreglando-tu-xaml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/09/tip-arreglando-tu-xaml/</feedburner:origLink></item>
		<item>
		<title>Usando el control MediaPlayer para mostrar videos de YouTube</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/FGQ9CSOt_yM/</link>
		<comments>http://jamolina.com/index.php/2009/08/usando-el-control-mediaplayer-para-mostrar-videos-de-youtube/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 23:31:40 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[MediaPlayer]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/08/usando-el-control-mediaplayer-para-mostrar-videos-de-youtube/</guid>
		<description><![CDATA[Santiago Leguiza ya nos mostró platicó un poco sobre el control MediaPlayer. Algo interesante de este control es que nos permite mostrar videos en alta definición (HD) y de fuentes como YouTube. Para lograr esto lo primero que necesitamos es la dirección del video (ojo, no de la página donde esta el video). YouTube guarda [...]]]></description>
			<content:encoded><![CDATA[<p>Santiago Leguiza ya nos mostró platicó un poco sobre <a href="http://blogs.ligasilverlight.com/?p=473" target="_blank">el control MediaPlayer</a>. Algo interesante de este control es que nos permite mostrar videos en alta definición (HD) y de fuentes como YouTube.</p>
<p><span id="more-302"></span></p>
<p>Para lograr esto lo primero que necesitamos es la dirección del video (ojo, no de la página donde esta el video). YouTube guarda distintas versiones del mismo video, incluyendo algunas versiones en HD.</p>
<p>Para obtener una dirección de un video de YouTube podemos instalar el popular plugin para FireFox llamado <a href="https://addons.mozilla.org/en-US/firefox/addon/748" target="_blank">GreaseMonkey</a>, después descargamos el script para este plugin llamado <a href="http://userscripts.org/scripts/show/31864" target="_blank">YouTube HD Ultimate</a>. Este script carga automáticamente la versión HD de un video cuando está disponible. Además nos muestra las ligas de las diferentes versiones del video.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/08/image1.png" rel="lightbox[302]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/08/image_thumb1.png" border="0" alt="image" width="799" height="297" /></a></p>
<p>Nosotros vamos a escoger la versión “hd mp4”, así que damos clic derecho y elegimos copiar e url destino. En este caso:</p>
<p><a title="http://www.youtube.com/get_video?video_id=IClBpch9vmM&amp;t=vjVQa1PpcFPq3EX07r_nTWsOLK6onBcN-RrZbXR6KuU%3D&amp;fmt=22" href="http://www.youtube.com/get_video?video_id=IClBpch9vmM&amp;t=vjVQa1PpcFPq3EX07r_nTWsOLK6onBcN-RrZbXR6KuU%3D&amp;fmt=22">http://www.youtube.com/get_video?video_id=IClBpch9vmM&amp;t=vjVQa1PpcFPq3EX07r_nTWsOLK6onBcN-RrZbXR6KuU%3D&amp;fmt=22</a></p>
<p>Ahora bien, nos vamos a Expression Blend y colocamos un control MediaPlayer en nuestra applicación (Recuerden que tenemos que tener instalado Expression Encoder para que este control aparezca).</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/08/image2.png" rel="lightbox[302]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/08/image_thumb2.png" border="0" alt="image" width="1044" height="659" /></a></p>
<p>Después nos vamos al panel de propiedades y en la sección de Media creamos un nuevo Playlist.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/08/image3.png" rel="lightbox[302]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/08/image_thumb3.png" border="0" alt="image" width="274" height="643" /></a></p>
<p>Una vez, creado el Playlist damos clic en el botón de la colección de elementos (mostrado arriba). En la ventana de edición de elementos elegimos Agregar Otro Elemento y al elemento nuevo solo tenemos que definir su propiedad MediaSource con la dirección del video.</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/08/image4.png" rel="lightbox[302]"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://jamolina.com/wp-content/uploads/2009/08/image_thumb4.png" border="0" alt="image" width="595" height="595" /></a></p>
<p>¡Listo! Solo nos queda presionar F5 para ejecutar nuestra aplicación y distrutar de nuestro video de YouTube HD desde Silverlight.</p>
<p>Pueden descargarse el proyecto <a href="http://jamolina.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31859" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/index.php/2009/08/usando-el-control-mediaplayer-para-mostrar-videos-de-youtube/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/08/usando-el-control-mediaplayer-para-mostrar-videos-de-youtube/</feedburner:origLink></item>
		<item>
		<title>Cambios</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/y6zkG6CJ_b8/</link>
		<comments>http://jamolina.com/index.php/2009/08/bienvenido/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 20:56:05 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Cambios]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/08/bienvenido/</guid>
		<description><![CDATA[A petición popular (de 1 persona), decidí separar dividir mi blog en uno personal y otro profesional (que es este que estan viendo). Así que para no mezclar las cosas, dejamos este blog para todo lo relacionado a programación (en especial .NET y Silverlight) y el otro será para todo lo relacionado con música, humor, [...]]]></description>
			<content:encoded><![CDATA[<p>A petición popular (de 1 persona), decidí separar dividir mi blog en uno <a href="http://turok.jamolina.com/" target="_blank">personal</a> y otro profesional (que es este que estan viendo). Así que para no mezclar las cosas, dejamos este blog para todo lo relacionado a programación (en especial .NET y Silverlight) y el otro será para todo lo relacionado con música, humor, noticias, etc.</p>
<p><span id="more-292"></span></p>
<p>No olviden dejar sus comentarios. Por su atención, ¡Gracias!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/index.php/2009/08/bienvenido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/08/bienvenido/</feedburner:origLink></item>
		<item>
		<title>Silverlight Toolkit: GridSplitter</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/MzIrjWzez-s/</link>
		<comments>http://jamolina.com/index.php/2009/08/silverlight-toolkit-gridsplitter-2/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:08:57 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[GridSplitter]]></category>
		<category><![CDATA[Silverlight Toolkit]]></category>

		<guid isPermaLink="false">http://jamolina.com/index.php/2009/08/silverlight-toolkit-gridsplitter-2/</guid>
		<description><![CDATA[Seguimos con esta serie de posts acerca del Silverlight Toolkit. En esta ocasión veremos el GridSplitter, un control muy útil al momento de diseñar interfaces personalizables en nuestra aplicación de Silverlight. Propiedades PreviewStyle – Maneja el estilo usado para la vista previa de los cambios ShowsPreview – Indica si se mostrará una vista previa a [...]]]></description>
			<content:encoded><![CDATA[<p>Seguimos con esta serie de posts acerca del <a href="http://jamolina.com/index.php/tag/silverlight-toolkit/" target="_blank">Silverlight Toolkit</a>. En esta ocasión veremos el <a href="http://msdn.microsoft.com/es-mx/library/system.windows.controls.gridsplitter%28VS.95%29.aspx" target="_blank">GridSplitter</a>, un control muy útil al momento de diseñar interfaces personalizables en nuestra aplicación de Silverlight.</p>
<p><span id="more-287"></span></p>
<p><strong>Propiedades</strong></p>
<ul>
<li><strong>PreviewStyle – </strong>Maneja el estilo usado para la vista previa de los cambios</li>
<li><strong>ShowsPreview</strong> – Indica si se mostrará una vista previa a los cambios</li>
</ul>
<p>El GridSplitter se coloca en cualquier celda de un Grid y dependiendo de los valores que asignemos a sus propiedades <strong><em>HorizontalAlignment</em></strong> y <strong><em>VerticalAlignment</em></strong> es la forma en que se comportará:</p>
<table border="1" cellspacing="0" cellpadding="2" width="588">
<tbody>
<tr>
<td width="133" valign="top"><strong>HorizontalAlignment</strong></td>
<td width="133" valign="top"><strong>VerticalAlignment</strong></td>
<td width="320" valign="top"><strong>Resultado</strong></td>
</tr>
<tr>
<td width="133" valign="top">Stretch</td>
<td width="133" valign="top">Otra</td>
<td width="320" valign="top">Redimensiona filas</td>
</tr>
<tr>
<td width="133" valign="top">Otra</td>
<td width="133" valign="top">Stretch</td>
<td width="320" valign="top">Redimensiona columnas</td>
</tr>
<tr>
<td width="133" valign="top">Stretch</td>
<td width="133" valign="top">Stretch</td>
<td width="320" valign="top">Redimensiona columnas si <strong><em>ActualHeight</em></strong> es mayor o igual que <strong><em>ActualWidth</em></strong>. De otra forma, redimensiona filas.</td>
</tr>
</tbody>
</table>
<p>Para usar este control necesitamos por lo menos dos controles Grid. En este ejemplo vamos a construir un layout de una aplicación con sus paneles de tamaño personalizable:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/08/image.png" rel="lightbox[287]"><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" src="http://jamolina.com/wp-content/uploads/2009/08/image_thumb.png" border="0" alt="image" width="635" height="480" /></a></p>
<p>En este caso, solo usaremos ShowsPreview en el panel inferior del centro (el amarillo). Como siempre, debemos comenzar por agregar la referencia de System.Windows.Controls a nuestro proyecto y luego la agregamos a nuestro MainPage.xaml:</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: 102.57%; font-family: 'Courier New',courier,monospace; direction: ltr; height: 38px; 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: 98.39%; font-family: 'Courier New',courier,monospace; direction: ltr; height: 20px; 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: #ff0000">xmlns:controls</span><span style="color: #0000ff">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"</span></pre>
<p><!--CRLF--></div>
</div>
<p>Después procedemos a definir nuestras columnas y filas para crear el layout mostrado en la imagen de arriba:</p>
<div id="codeSnippetWrapper">
<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">Grid</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="LayoutRoot"</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">Grid.ColumnDefinitions</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">ColumnDefinition</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="0.208*"</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">ColumnDefinition</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="0.578*"</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">ColumnDefinition</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="0.214*"</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">Grid.ColumnDefinitions</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">Canvas</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelIzquierdo"</span> <span style="color: #ff0000">Background</span><span style="color: #0000ff">="#FF0E3EA3"</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">Canvas</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelDerecho"</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Column</span><span style="color: #0000ff">="2"</span> <span style="color: #ff0000">Background</span><span style="color: #0000ff">="#FFC11B1B"</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;"></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">controls:GridSplitter</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="10"</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: #ff0000">Grid</span>.<span style="color: #ff0000">Column</span><span style="color: #0000ff">="0"</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: #ff0000">VerticalAlignment</span><span style="color: #0000ff">="Stretch"</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: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">="Right"</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: #ff0000">Margin</span><span style="color: #0000ff">="0,0,-5,0"</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: #ff0000">Background</span><span style="color: #0000ff">="Transparent"</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;"></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">controls:GridSplitter</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="10"</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: #ff0000">Grid</span>.<span style="color: #ff0000">Column</span><span style="color: #0000ff">="2"</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: #ff0000">VerticalAlignment</span><span style="color: #0000ff">="Stretch"</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: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">="Left"</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: #ff0000">Margin</span><span style="color: #0000ff">="-5,0,0,0"</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: #ff0000">Background</span><span style="color: #0000ff">="Transparent"</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">Grid</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelCentral"</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Column</span><span style="color: #0000ff">="1"</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">Grid.RowDefinitions</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">RowDefinition</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">="0.179*"</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">RowDefinition</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">="0.652*"</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">RowDefinition</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">="0.169*"</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">Grid.RowDefinitions</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">Canvas</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelCentralSuperior"</span> <span style="color: #ff0000">Background</span><span style="color: #0000ff">="#FF24C504"</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">Canvas</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelCentralInferior"</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span><span style="color: #0000ff">="2"</span> <span style="color: #ff0000">Background</span><span style="color: #0000ff">="#FFB1DA00"</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">Canvas</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="panelCentralCentral"</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span><span style="color: #0000ff">="1"</span> <span style="color: #ff0000">Background</span><span style="color: #0000ff">="#FFD2A819"</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;"></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">controls:GridSplitter</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">="10"</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: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span><span style="color: #0000ff">="1"</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: #ff0000">Margin</span><span style="color: #0000ff">="0,-5,0,0"</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: #ff0000">VerticalAlignment</span><span style="color: #0000ff">="Top"</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: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">="Stretch"</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: #ff0000">Background</span><span style="color: #0000ff">="Transparent"</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;"></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">controls:GridSplitter</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">="10"</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: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span><span style="color: #0000ff">="2"</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: #ff0000">VerticalAlignment</span><span style="color: #0000ff">="Top"</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: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">="Stretch"</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: #ff0000">Background</span><span style="color: #0000ff">="Transparent"</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: #ff0000">Margin</span><span style="color: #0000ff">="0,-5,0,0"</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: #ff0000">ShowsPreview</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: 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">Grid</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">Grid</span><span style="color: #0000ff">&gt;</span></pre>
<p><!--CRLF--></div>
</div>
<p>Podemos ver como el primer GridSplitter se coloca en la primera celda del grid principal, ahí le indicamos que se alinea a la derecha horizontalmente y que abarque todo su espacio verticalmente, lo que provoca que el usuario pueda redimensionar el espacio de la columna de la izquierda y la central.</p>
<p>Lo mismo pasa con el resto de los separadores. Un caso a notar es el del último GridSplitter, donde usamos ShowsPreview. Cuando tratamos de redimensionar el panel amarillo, observamos una línea horizontal que actúa como vista previa, en vez de cambiarlo en tiempo real como el comportamiento de el resto de los separadores.</p>
<p>Como podemos ver, este control es una gran herramienta para proveer al usuario final una interfaz personalizable de manera sencilla.</p>
<p>Pueden ver el demo en línea <a href="http://demos.jamolina.com/GridSplitterDemo/" target="_blank">aquí</a> o descargarse el proyecto <a href="http://jamolina.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31393" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/index.php/2009/08/silverlight-toolkit-gridsplitter-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/08/silverlight-toolkit-gridsplitter-2/</feedburner:origLink></item>
		<item>
		<title>Silverlight Toolkit: DatePicker</title>
		<link>http://feedproxy.google.com/~r/Jamolinacom/~3/s9XcVaFi9qg/</link>
		<comments>http://jamolina.com/index.php/2009/07/silverlight-toolkit-datepicker/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 06:01:30 +0000</pubDate>
		<dc:creator>Arturo Molina</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[DatePicker]]></category>
		<category><![CDATA[Silverlight Toolkit]]></category>

		<guid isPermaLink="false">http://jamolina.com/?p=277</guid>
		<description><![CDATA[DatePicker es un control conformado de un campo de texto y un calendario. Esto le da al usuario final la flexibilidad de escribir la fecha en el campo de texto o seleccionarla desde un calendario como el del post pasado. De hecho, muchas de las propiedades del DatePicker son para manejar el calendario de la [...]]]></description>
			<content:encoded><![CDATA[<p><a href="The user account must be created as both a local account on the web servers and a domain account which will be giving permissions to the share on the File server" target="_blank">DatePicker</a> es un control conformado de un campo de texto y un calendario. Esto le da al usuario final la flexibilidad de escribir la fecha en el campo de texto o seleccionarla desde un calendario como el del <a href="http://jamolina.com/index.php/2009/07/silverlight-toolkit-calendar/" target="_blank">post pasado</a>. De hecho, muchas de las propiedades del DatePicker son para manejar el calendario de la misma manera en que manejamos el control <a href="http://msdn.microsoft.com/es-mx/library/system.windows.controls.calendar%28VS.95%29.aspx" target="_blank">Calendar</a>.</p>
<p><span id="more-277"></span></p>
<p>Propiedades:</p>
<ul>
<li><strong>BlackoutDates</strong> – Los días en esta colección aparecerán tachados y no podrán ser seleccionados.</li>
<li><strong>DisplayDate</strong> – Indica una fecha que será visible al momento de desplegarse, sin importar la fecha que esté seleccionada actualmente</li>
<li><strong>DisplayDateStart</strong> y <strong>DisplayDateEnd</strong> – Indican el rango de fechas que serán visibles. Cualquier fecha fuera de este rango simplemente no aparecerá en el calendario.</li>
<li><strong>FirstDateOfWee</strong>k – Primer día de la semana en el calendario (Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday)</li>
<li><strong>IsDropDownOpen – </strong>Indica si el calendario esta abierto</li>
<li><strong>IsTodayHighlighted</strong> – Indica si queremos que el día actual esté resaltado (True/False)</li>
<li><strong>SelectedDate</strong> – Fecha seleccionada</li>
<li><strong>SelectedDateFormat – </strong>Formato de la fecha
<ul>
<li><strong><em>Short – </em></strong>27/07/2009</li>
<li><strong><em>Long -</em></strong> lunes, 27 de julio de 2009</li>
</ul>
</li>
<li><strong>SelectionBackground – </strong>El color de fondo de la fecha seleccionada en el campo de texto</li>
<li><strong>Text – </strong>Contenido del campo de text</li>
</ul>
<p>Eventos:</p>
<ul>
<li><strong>CalendarClosed </strong>– Se dispara cuando el calendario se cierra</li>
<li><strong>CalendarOpened</strong> – Se dispara cuando el calendario se abre</li>
<li><strong>DateValidationError – </strong>Ocurre cuando el valor insertado en el campo de texto no puede ser interpretado como una fecha</li>
<li><strong>SelectedDatesChanged</strong> – Se dispara cuando se cambia de fecha(s)seleccionada(s)</li>
</ul>
<p>Nuevamente, debemos comenzar por agregar la referencia System.Windows.Controls a nuestro proyecto. Además de ponerla en nuestro MainPage.xaml:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; height: 30px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #800000">UserControl</span> <span style="color: #ff0000">xmlns:controls</span><span style="color: #0000ff">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"</span></pre>
<p><!--CRLF--></div>
</div>
<p>Para ejemplificar las distintas propiedades y eventos del DatePicker, vamos a contruir un pequeño control que nos permita escoger dos fechas para reservar un boleto de avión. Primero, usamos Blend 3 para hace rápidamente una pequeña interfaz de usuario:</p>
<p><a href="http://jamolina.com/wp-content/uploads/2009/07/image1.png" rel="lightbox[277]"><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" src="http://jamolina.com/wp-content/uploads/2009/07/image_thumb1.png" border="0" alt="image" width="653" height="491" /></a></p>
<p>A continuación vamos a escribir toda lafuncionalidad en el archivo de código de nuestro control, en este caso, MainPage.cs. Vamos a bloquear las fechas anteriores al día actual:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #008000">//Bloqueamos las fechas pasadas</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">fechaSalida.BlackoutDates.AddDatesInPast();</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">fechaRegreso.BlackoutDates.AddDatesInPast();</pre>
<p><!--CRLF--></div>
</div>
<p>Cuando se selecciona la fecha de Salida queremos asegurarnos de que la fecha de Regreso sea igual o mayor. Para esto, agregamos un delegado al evento SelectedDateChanged del DatePick de salida:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">fechaSalida.SelectedDateChanged +=</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">new</span> EventHandler&lt;SelectionChangedEventArgs&gt;(fechaSalida_SelectedDateChanged);</pre>
<p><!--CRLF--></div>
</div>
<p>En dicho delegado reiniciamos el mensaje de error y las blackoutDates a los valores originales. Hacemos una validación para asegurarnos que si la fecha de Regreso ya había sido seleccionada y es menor a la nueva fecha de Salida, será reseteada a nulo. Agregamos a la colección BlackoutDates un rango de fechas entre el día actual y el día de Salida seleccionado menos uno (para no excluirlo). Nótese el uso de GetValueOrDefault() para la propiedad SelectedDate, esto es debido a que dicha propiedad es de tipo DateTime?, osea que es Nullable, y queremos asegurarnos de obtener un valor válido:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; height: 218px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #0000ff">void</span> fechaSalida_SelectedDateChanged(<span style="color: #0000ff">object</span> sender, SelectionChangedEventArgs e)</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">{</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #008000">//Reiniciamos mensaje de error</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    textoErrorSalida.Text = <span style="color: #006080">""</span>;</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #008000">//Reiniciamos las BlackoutDates</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    fechaRegreso.BlackoutDates.Clear();</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    fechaRegreso.BlackoutDates.AddDatesInPast();</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">if</span> (fechaSalida.SelectedDate &gt; fechaRegreso.SelectedDate)</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    {</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        fechaRegreso.SelectedDate = <span style="color: #0000ff">null</span>;</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    }</pre>
<p><!--CRLF--></p>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">if</span> (fechaSalida.SelectedDate == DateTime.Today)</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    {</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        <span style="color: #008000">//No hacemos nada</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    }</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">else</span> <span style="color: #008000">//Evitamos que la fecha de regreso pueda ser menor a la de salida</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    {</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        <span style="color: #008000">//Agregamos las necesarias</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        DateTime fechaSalidaActual = fechaSalida.SelectedDate.GetValueOrDefault();</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        CalendarDateRange rangoBlackout =</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        <span style="color: #0000ff">new</span> CalendarDateRange(DateTime.Today, fechaSalidaActual.AddDays(-1));</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        fechaRegreso.BlackoutDates.Add(rangoBlackout);</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    }</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">}</pre>
<p><!--CRLF--></div>
</div>
<p>El siguiente paso es lidiar con fechas no válidas. Debido a que el usuario puede escribir cualquier cosa en el campo de texto, hay probabilidades de que la fecha escrita no pueda ser interpretada como fecha y por tanto debemos lidiar con ello. Agregamos los delegados de la siguiente manera:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">fechaSalida.DateValidationError +=</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">new</span> EventHandler&lt;DatePickerDateValidationErrorEventArgs&gt;(fecha_DateValidationError);</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">fechaRegreso.DateValidationError +=</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">new</span> EventHandler&lt;DatePickerDateValidationErrorEventArgs&gt;(fecha_DateValidationError);</pre>
<p><!--CRLF--></div>
</div>
<p>Y lidiamos con errores así:</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #0000ff">void</span> fecha_DateValidationError(<span style="color: #0000ff">object</span> sender, DatePickerDateValidationErrorEventArgs e)</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">{</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    DatePicker pick = (DatePicker)sender;</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">if</span> (pick == fechaSalida)</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    {</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        textoErrorSalida.Text = <span style="color: #006080">"La fecha no es válida"</span>;</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    }</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    {</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">        textoErrorRegreso.Text = <span style="color: #006080">"La fecha no es válida"</span>;</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">    }</pre>
<p><!--CRLF--></p>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">}</pre>
<p><!--CRLF--></div>
</div>
<p>Finalmente, lidiamos con otros detalles como el evento del botón, limpiar errores, etcétera. El resultado final pueden verlo <a href="http://demos.jamolina.com/DatePickerDemo/" target="_blank">aquí</a> y puden bajarse la solución <a href="http://jamolina.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30784" target="_blank">aquí</a>.</p>
<p>Dudas y comentarios, no duden en contactarme.</p>
<p>¡Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamolina.com/index.php/2009/07/silverlight-toolkit-datepicker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jamolina.com/index.php/2009/07/silverlight-toolkit-datepicker/</feedburner:origLink></item>
	</channel>
</rss>
