<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Un informático en construcción</title><subtitle type="html">.NET, tecnología y más</subtitle><id>http://geeks.ms/blogs/creneses/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/creneses/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/creneses/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2007-12-02T19:34:00Z</updated><entry><title>[WP7] Skydrive, subiendo archivos en Windows Phone 7</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2012/08/06/wp7-skydrive-subiendo-archivos-en-windows-phone-7.aspx" /><id>/blogs/creneses/archive/2012/08/06/wp7-skydrive-subiendo-archivos-en-windows-phone-7.aspx</id><published>2012-08-06T09:45:00Z</published><updated>2012-08-06T09:45:00Z</updated><content type="html">&lt;p&gt;Dentro de los servicios Live de Microsoft, uno de los servicios que m&amp;aacute;s importancia esta tomando &amp;uacute;ltimamente es Skydrive. Este servicio de almacenamiento nos ofrece entre otras cosas 7 gigas de almacenamiento online, acceso con clientes tanto online como desde Mac, Windows, Ipad, Windows Phone, edici&amp;oacute;n y visualizaci&amp;oacute;n de archivos de Office, etc.&lt;/p&gt;
&lt;p&gt;Todo esto unido a su gratuidad hace que por lo menos nos tengamos que plantear su uso en nuestros desarrollos en el caso de necesitar almacenar documentos fuera de nuestro tel&amp;eacute;fono.&lt;/p&gt;
&lt;p&gt;Vamos a comenzar programando la subida de un archivo, para ello creamos un nuevo proyecto Windows Phone Application. Tenemos a&amp;ntilde;adir dos referencias a nuestro proyecto del SDK de Live, &lt;b&gt;Microsoft.Live&lt;/b&gt; y &lt;b&gt;Microsoft.Live.Controls&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img class="size-full wp-image-438 aligncenter" title="cap1" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap1.png" width="257" height="274" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n a&amp;ntilde;adimos el control &lt;b&gt;SignInButton&lt;/b&gt; a nuestro toolbox:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class="wp-image-437 aligncenter" title="cap2" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap2.png" width="800" height="374" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una vez lo tengamos disponible en el toolbox, podemos arrastrarlo a nuestra MainPage.xaml. Debemos a&amp;ntilde;adirle en las propiedades nuestro ClientID.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class="wp-image-436 aligncenter" title="cap3" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap3.png" width="800" height="505" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n vamos a a&amp;ntilde;adir un bot&amp;oacute;n para realizar las subidas de archivos, podemos subir cualquier tipo de archivo pero para no complicar la demostraci&amp;oacute;n simplemente vamos a seleccionar una imagen de la galer&amp;iacute;a de im&amp;aacute;genes de Windows Phone para subirla posteriormente.&lt;/p&gt;
&lt;p&gt;En el SignInButton tenemos a&amp;ntilde;adir el evento &lt;b&gt;SessionChanged&lt;/b&gt; donde controlamos si estamos validados o no, dentro de este m&amp;eacute;todo simplemente vamos a habilitar el bot&amp;oacute;n de &amp;ldquo;Upload&amp;rdquo;, seg&amp;uacute;n el estado de la conexi&amp;oacute;n a Skydrive.&lt;/p&gt;
&lt;p&gt;Dentro del evento SessionChanged tenemos lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img class="alignnone size-full wp-image-435" title="cap4" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap4.png" width="851" height="391" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Es una comprobaci&amp;oacute;n del estado de la conexi&amp;oacute;n, para habilitar o no el bot&amp;oacute;n que nos permite subir las im&amp;aacute;genes. Adem&amp;aacute;s guardamos el estado de la sesi&amp;oacute;n, nos har&amp;aacute; falta para subir la imagen a Skydrive.&lt;/p&gt;
&lt;p&gt;En el bot&amp;oacute;n Upload vamos a editar el evento &lt;b&gt;Click&lt;/b&gt;, abriendo la galer&amp;iacute;a de im&amp;aacute;genes&lt;/p&gt;
&lt;p&gt;&lt;img class="alignnone size-full wp-image-434" title="cap5" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap5.png" width="609" height="148" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Rellenamos ahora el evento que acabamos de declarar:&lt;/p&gt;
&lt;p&gt;&lt;img class="alignnone size-full wp-image-433" title="cap6" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap6.png" width="608" height="213" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Se comprueba que la selecci&amp;oacute;n de la imagen se ha realizado correctamente y pasamos la imagen a un objeto Stream.&lt;/p&gt;
&lt;p&gt;Por ultimo declaramos el evento &lt;b&gt;Completed&lt;/b&gt; y subimos la imagen con el evento &lt;b&gt;UploadAsync&lt;/b&gt;. Esto nos dejara la foto en la ra&amp;iacute;z de nuestro Skydrive.&lt;/p&gt;
&lt;p&gt;&lt;img class="alignnone size-full wp-image-432" title="cap7" src="http://cesarreneses.net/wp-content/uploads/2012/08/cap7.png" width="647" height="231" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Este es el aspecto del evento &lt;b&gt;LiveConnectClientUploadCompleted&lt;/b&gt;, podr&amp;iacute;amos hacer cualquier cosa, en este caso he optado por recoger la direcci&amp;oacute;n de la imagen y lanzarla en el explorador de Windows Phone.&lt;/p&gt;
&lt;p&gt;Todo el c&amp;oacute;digo est&amp;aacute; disponible desde &lt;a href="http://sdrv.ms/Njh4bD"&gt;aqu&amp;iacute;.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un saludo &lt;img src="http://cesarreneses.net/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /&gt; &lt;/p&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=206384" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET/default.aspx" /><category term="WP7" scheme="http://geeks.ms/blogs/creneses/archive/tags/WP7/default.aspx" /><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[WP7] Nueva versión del toolkit de Silverlight para Windows Phone</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2011/08/19/wp7-nueva-versi-243-n-del-toolkit-de-silverlight-para-windows-phone.aspx" /><id>/blogs/creneses/archive/2011/08/19/wp7-nueva-versi-243-n-del-toolkit-de-silverlight-para-windows-phone.aspx</id><published>2011-08-19T02:45:00Z</published><updated>2011-08-19T02:45:00Z</updated><content type="html">&lt;p&gt;Hola a tod@s,
&lt;/p&gt;
&lt;p&gt;hace un par de d&amp;iacute;as ha aparecido la versi&amp;oacute;n estable del Silverlight Toolkit for Windows Phone, la &amp;uacute;ltima versi&amp;oacute;n estable salio por febrero de este a&amp;ntilde;o.
Pero bueno, el caso es que ya la tenemos aqu&amp;iacute; y trae algunas novedades. &lt;/p&gt;
&lt;p&gt;Antes de nada para los que no se hallan actualizado, es necesario tener instalado la ultima versi&amp;oacute;n de las herramientas de desarrollo para &amp;quot;Mango&amp;quot;.
&lt;/p&gt;
&lt;p&gt;Se han a&amp;ntilde;adido algunos componentes: PhoneTextBox, DateTimePickers, LockablePivots, MultiSelectList, LongListSelector, HubTitle, ExpanderView y HeaderedItemsControl. Y como siempre se han solucionado algunos fallos y se ha optimizado el rendimiento de los componentes.
&lt;/p&gt;
&lt;p&gt;La verdad es que viene bastante completo, podeis ver la descripci&amp;oacute;n de todas las novedades en el &lt;a href="http://www.jeff.wilcox.name/2011/08/august2011phonetoolkit/" target="_blank"&gt;blog de Jeff Wilcox&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Y nada, a parte de dejaros los enlaces correspondientes os recomiento que os bajeis el XAP de ejemplo y que lo metais en el emulador o en vuestro movil para ver como funciona :)
&lt;/p&gt;
&lt;p&gt;Recursos:
&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt; &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26648" target="_blank"&gt;Windows Phone SDK 7.1 Beta 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;a href="http://silverlight.codeplex.com/releases/view/71550" target="_blank"&gt;Silverlight Toolkit for Windows Phone&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
 Saludetes ;)
&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=199693" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[WP7] Detectar la reproducción de música</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2011/01/03/wp7-detectar-la-reproducci-243-n-de-m-250-sica.aspx" /><id>/blogs/creneses/archive/2011/01/03/wp7-detectar-la-reproducci-243-n-de-m-250-sica.aspx</id><published>2011-01-03T09:48:00Z</published><updated>2011-01-03T09:48:00Z</updated><content type="html">&lt;p&gt;Uno de los puntos en los que tenemos que estar atentos para que nuestras aplicaciones logren pasar el proceso de certificaci&amp;oacute;n del MarketPlace es si el dispositivo est&amp;aacute; reproduciendo m&amp;uacute;sica en el momento de ejecutar nuestra aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;En el caso de que el usuario est&amp;eacute; escuchando m&amp;uacute;sica nuestra aplicaci&amp;oacute;n deber&amp;iacute;a&amp;nbsp; pedirle permiso antes de poder cortar esa reproducci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Detectar si se reproduce m&amp;uacute;sica es sencillo, simplemente vamos a a&amp;ntilde;adir a la clase &lt;strong&gt;App.xaml.cs&lt;/strong&gt; el namespace &lt;strong&gt;Microsoft.XNA.Framework.Media&lt;/strong&gt; y as&amp;iacute; podremos hacer uso de una variable booleana &lt;strong&gt;MediaPlayer.GameHasControl &lt;/strong&gt;esta variable nos dice si tu programa tiene el control sobre la reproducci&amp;oacute;n de sonido.&lt;/p&gt;
&lt;p&gt;El ejemplo que muestro a continuaci&amp;oacute;n lo he realizado usando Silverlight por lo que el namespace que indico arriba no viene por defecto , as&amp;iacute; que pulsamos con el bot&amp;oacute;n derecho del rat&amp;oacute;n en la carpeta de referencias y pulsamos en agregar referencia y del listado que obtenemos usamos Microsoft.XNA.Framework.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound1_5F00_589EDD0C.png"&gt;&lt;img height="196" width="361" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound1_5F00_thumb_5F00_18C4D0BA.png" alt="wp7sound1" border="0" title="wp7sound1" style="background-image:none;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;padding-top:0px;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound2_5F00_5A0FD353.png"&gt;&lt;img height="336" width="435" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound2_5F00_thumb_5F00_72BEFA96.png" alt="wp7sound2" border="0" title="wp7sound2" style="background-image:none;padding-left:0px;padding-right:0px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0px;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Al a&amp;ntilde;adir la referencia Visual Studio nos advierte de que pueden aparecer &amp;ldquo;rayos y centellas&amp;rdquo; cuando menos lo esperemos, no teng&amp;aacute;is miedo y decidle que SI quer&amp;eacute;is continuar &lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wlEmoticon_2D00_smile_5F00_71B6E4EC.png" alt="Sonrisa" class="wlEmoticon wlEmoticon-smile" style="border-style:none;" /&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound3_5F00_0CEF3DEE.png"&gt;&lt;img height="194" width="443" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wp7sound3_5F00_thumb_5F00_44554F1C.png" alt="wp7sound3" border="0" title="wp7sound3" style="background-image:none;padding-left:0px;padding-right:0px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0px;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Es hora de abrir la clase App.xaml.cs y a&amp;ntilde;adir el siguiente c&amp;oacute;digo al evento Application_Launching que ejecuta lo que sea necesario cuando se est&amp;aacute; iniciando la aplicaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin:0px;display:inline;float:none;padding:0px;"&gt;
&lt;pre style="width:913px;height:199px;background-color:white;overflow:auto;font-family:Microsoft Sans Serif;font-size:9,75;"&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt; 1&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Application_Launching(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, LaunchingEventArgs e)
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 2&lt;/span&gt; &lt;span style="color:#000000;"&gt;        {
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 3&lt;/span&gt; &lt;span style="color:#000000;"&gt;            FrameworkDispatcher.Update();
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 4&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (MediaPlayer.GameHasControl&lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 5&lt;/span&gt; &lt;span style="color:#000000;"&gt;            {
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 6&lt;/span&gt; &lt;span style="color:#000000;"&gt;                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (MessageBox.Show(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Quieres cortar la reproducci&amp;oacute;n de m&amp;uacute;sica en background&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Aviso&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, MessageBoxButton.OKCancel) &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; MessageBoxResult.Cancel)
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 7&lt;/span&gt; &lt;span style="color:#000000;"&gt;                {
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 8&lt;/span&gt; &lt;span style="color:#000000;"&gt;                    Application.Current.Exit&lt;/span&gt;&lt;span style="color:#000000;"&gt;+=&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; EventHandler(Current_Exit);
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 9&lt;/span&gt; &lt;span style="color:#000000;"&gt;                }
&lt;/span&gt;&lt;span style="color:#008080;"&gt;10&lt;/span&gt; &lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;11&lt;/span&gt; &lt;span style="color:#000000;"&gt;            }
&lt;/span&gt;&lt;span style="color:#008080;"&gt;12&lt;/span&gt; &lt;span style="color:#000000;"&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Antes de nada lo primero que pod&amp;eacute;is ver es la instrucci&amp;oacute;n FrameworkDispacher.Update(). En XNA la clase Game se encarga autom&amp;aacute;ticamente de llamar a este m&amp;eacute;todo para conocer el estado de diferentes componentes del dispositivo, como el proyecto lo estamos realizando con Silverlight debemos ser nosotros quienes llamemos al m&amp;eacute;todo en el momento que lo necesitemos.&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n pregunto por el control del sonido, en el caso de que no lo tenga mi aplicaci&amp;oacute;n lanzo un MessageBox, si el usuario pulsa &amp;ldquo;Ok&amp;rdquo; la aplicaci&amp;oacute;n corta autom&amp;aacute;ticamente la reproducci&amp;oacute;n de sonido en background y toma el control y en el caso de pulsar &amp;ldquo;Cancel&amp;rdquo; sale de la aplicaci&amp;oacute;n inmediatamente.&lt;/p&gt;
&lt;p&gt;Creo que es la forma mas sencilla que tenemos de programar nuestra aplicaci&amp;oacute;n para que pase este punto de la certificaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Espero que sirva, un saludo &lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wlEmoticon_2D00_smile_5F00_71B6E4EC.png" alt="Sonrisa" class="wlEmoticon wlEmoticon-smile" style="border-style:none;" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=186691" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="WP7" scheme="http://geeks.ms/blogs/creneses/archive/tags/WP7/default.aspx" /><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[WP7] Estados de certificado de una aplicación</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2010/12/31/wp7-estados-de-certificado-de-una-aplicaci-243-n.aspx" /><id>/blogs/creneses/archive/2010/12/31/wp7-estados-de-certificado-de-una-aplicaci-243-n.aspx</id><published>2010-12-31T01:12:00Z</published><updated>2010-12-31T01:12:00Z</updated><content type="html">&lt;p&gt;Actualmente cuando terminados una aplicación para Windows Phone 7 y la subimos al MarketPlace de Microsoft para su certificado y posterior publicación, se nos va informando del estado en el que se encuentra este proceso de certificación.&lt;/p&gt;  &lt;p&gt;Voy a enumerar al menos los que conocemos los usuarios del &lt;a href="http://create.msdn.com" target="_blank"&gt;APP Hub&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Submission in Progress&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Tienes que finalizar el proceso de subida de la aplicación pulsando el botón de finalización.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ready for Testing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La aplicación todavía no ha sido introducida en el proceso de testing.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Testing in Progress &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La aplicación se encuentra en la cola de testing a la espera de que un tester se encuentre disponible.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ready for Signing &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La aplicación ha pasado las pruebas de certificación y está preparada para pasar a la fase de publicación.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ready for Publishing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;En esta fase la aplicación es publicada automáticamente en el MarketPlace si así lo hemos elegido durante el proceso de subida, sino deberemos activar la publicación manualmente.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Published to Marketplace &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La aplicación se encuentra publicada, aunque algunas veces tarda un día en aparecer en el MarketPlace.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Certification Failed &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La aplicación ha fallado la publicación y tienes que arreglar la parte en la que falla, para ello Microsoft proporciona un reporte bastante concreto en mi opinión sobre como debería comportarse la aplicación y como reproducir el error en nuestro ordenador.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;None &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si en algún momento te encuentras tu aplicación en este estado ponte en contacto con la gente de soporte pues puede que halla ocurrido algún error durante el proceso de subida.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Por último quiero indicar que el tiempo de publicación de una aplicación en el caso de que pase la certificación oscila entre cuatro y cinco días laborables.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Espero que os sirva, un saludo y que tengáis una buena entrada y salida de año &lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wlEmoticon_2D00_smile_5F00_3CC449F6.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=186561" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="WP7" scheme="http://geeks.ms/blogs/creneses/archive/tags/WP7/default.aspx" /><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[WP7] Tombstoning o que hacer cuando nos llaman al movil</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2010/12/14/wp7-tombstoning-o-que-hacer-cuando-nos-llaman-al-movil.aspx" /><id>/blogs/creneses/archive/2010/12/14/wp7-tombstoning-o-que-hacer-cuando-nos-llaman-al-movil.aspx</id><published>2010-12-14T12:44:00Z</published><updated>2010-12-14T12:44:00Z</updated><content type="html">&lt;p&gt;Como ya sabréis el cambio en la forma de desarrollar aplicaciones para Windows Phone 7 ha sido bastante radical con respecto a como se hacía en Windows Mobile 6.5. Ahora tenemos que seguir unas guías de estilo, tener en cuenta los botones del dispositivo, el contenido del programa, etc,. Pues bien, una de las diferencias más notables que podemos encontrar es la imposibilidad de correr mas de una aplicación al mismo tiempo, no hay manera de cambiar de una aplicación a otra&amp;#160; sin cerrar la primera (siempre que la aplicación no sea nativa del sistema).&lt;/p&gt;  &lt;p&gt;Aquí voy a aclarar una expresión que ha llevado a muchas discusiones / criticas, que es: ¿¡Windows Phone 7 no proporciona multitarea!? la respuesta es por un lado “no”, no nos permite a los desarrolladores en general mantener nuestras aplicaciones en segundo plano al estilo de WM6.5 y por otro lado “si”, si permite multitarea pero lo restringe a las aplicaciones propias del sistema operativo (y supongo que a las aplicaciones de terceros a los que Microsoft de su consentimiento). &lt;/p&gt;  &lt;p&gt;¿Por que han hecho esto así? bueno pues básicamente para dar más agilidad a la máquina y que no se produzca un desperdicio de recursos en el aparato, además disponemos de mecanismos como las notificaciones para avisar al usuario de cambios o actualizaciones de los datos de nuestro programa.&lt;/p&gt;  &lt;p&gt;Esta restricción de la multitarea no solo es idea de Microsoft, antes que ellos ya la ha practicado Apple con su IPhone. En Android por ejemplo esta faceta no se controla, dejando al desarrollador al cuidado de estas tareas.&lt;/p&gt;  &lt;p&gt;Pero vamos al tema del post de hoy “tombstoning”, como ya he dicho solo podemos tener ejecutándose una aplicación al mismo tiempo sin contar con las del sistema y además existen situaciones en las cuales el sistema se “apropia” de la pantalla, como es en el caso de las llamadas de teléfono. Cuando nos llaman al teléfono la aplicación que tenemos en pantalla se cierra inmediatamente y no tenemos opción de guardar la información con la que trabajábamos en ese momento.&lt;/p&gt;  &lt;p&gt;Para estos casos tenemos el “tombstoning”, que nos permite programar el guardado automático de la información del programa cuando el sistema o nosotros detenemos su ejecución. Disponemos de algunos eventos para guardar o cargar nuestros datos, estos son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Launching &lt;/li&gt;    &lt;li&gt;Activated &lt;/li&gt;    &lt;li&gt;Closing &lt;/li&gt;    &lt;li&gt;Deactivated &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Launching y Closing se producen cuando lanzamos la aplicación y cuando la cerramos, por otro lado disponemos de Activated y Deactivated que suceden cuando nos llaman al teléfono o pulsamos el botón de Volver.&lt;/p&gt;  &lt;p&gt;Voy a mostrar un ejemplo en el que persisto el texto de un textbox y donde muestro la hora a la que se desactivo la aplicación. &lt;/p&gt;  &lt;p&gt;Lo primero de todo es abrir Visual Studio y elegir un nuevo proyecto de tipo “Windows Phone Application”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen1_5F00_37A65A47.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="imagen1" border="0" alt="imagen1" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen1_5F00_thumb_5F00_35F58E73.png" width="538" height="374" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lo creamos y abrimos la clase App.xaml.cs, aproximadamente a la mitad de la clase podemos ver los eventos que os comentaba arriba. Bueno ponemos el cursor del ratón en el evento Deactivated y haciendo uso de PhoneApplicationService guardamos la hora en la que el programa se interrumpe por una llamada:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:640403b0-4110-4850-a225-49a661768669" class="wlWriterEditableSmartContent"&gt;&lt;pre style="width:635px;height:85px;background-color:White;overflow:auto;font-family:Microsoft Sans Serif;font-size:9,75;"&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;1&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Application_Deactivated(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, DeactivatedEventArgs e)
&lt;/span&gt;&lt;span style="color:#008080;"&gt;2&lt;/span&gt; &lt;span style="color:#000000;"&gt;        {
&lt;/span&gt;&lt;span style="color:#008080;"&gt;3&lt;/span&gt; &lt;span style="color:#000000;"&gt;            PhoneApplicationService.Current.State[&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;desactivadoHora&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;] &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; DateTime.Now;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;4&lt;/span&gt; &lt;span style="color:#000000;"&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ahora abrimos MainPage.xaml, veremos algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen2_5F00_096C5E8D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" title="imagen2" border="0" alt="imagen2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen2_5F00_thumb_5F00_330029C0.png" width="346" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Tenemos que añadir a la interfaz un TexBox y un TexBlock para que quede de la siguiente forma:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen3_5F00_1F72CA1F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="imagen3" border="0" alt="imagen3" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen3_5F00_thumb_5F00_5DF817C5.png" width="244" height="391" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="center"&gt;&amp;#160;&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c3721e9b-640a-4a0f-bde5-241d41675cf0" class="wlWriterEditableSmartContent"&gt;&lt;pre style="width:723px;height:409px;background-color:White;overflow:auto;font-family:Microsoft Sans Serif;font-size:9,75;"&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt; 1&lt;/span&gt; &lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid x:Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Background&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Transparent&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 2&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 3&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;RowDefinition Height&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Auto&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 4&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;RowDefinition Height&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;*&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 5&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 6&lt;/span&gt; &lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 7&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#000000;"&gt;TitlePanel contains the name of the application and page title&lt;/span&gt;&lt;span style="color:#000000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 8&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;StackPanel x:Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TitlePanel&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;0&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;12,17,0,28&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 9&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TextBlock x:Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ApplicationTitle&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Text&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;MY APPLICATION&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Style&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;{StaticResource PhoneTextNormalStyle}&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;10&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TextBlock x:Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;PageTitle&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Text&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;page name&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;9,-7,0,0&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Style&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;{StaticResource PhoneTextTitle1Style}&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;11&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;12&lt;/span&gt; &lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;13&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#000000;"&gt;ContentPanel &lt;/span&gt;&lt;span style="color:#000000;"&gt;-&lt;/span&gt;&lt;span style="color:#000000;"&gt; place additional content here&lt;/span&gt;&lt;span style="color:#000000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;14&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid x:Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ContentPanel&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;1&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;12,0,12,0&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;15&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TextBox Height&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;279&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Left&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;36,50,0,0&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textBox1&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Text&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Top&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Width&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;384&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; TextChanged&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textBox1_TextChanged&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;16&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TextBlock Height&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;57&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Left&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;36,361,0,0&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Name&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textBlock1&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Text&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Top&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; Width&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;389&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;17&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;18&lt;/span&gt; &lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ahora en el evento TextChanged del TextBox añadimos la siguiente línea:&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:267e0084-344a-4602-9a9e-e7598159130a" class="wlWriterEditableSmartContent"&gt;&lt;pre style="width:723px;height:78px;background-color:White;overflow:auto;font-family:Microsoft Sans Serif;font-size:9,75;"&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;1&lt;/span&gt; &lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; textBox1_TextChanged(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, TextChangedEventArgs e)
&lt;/span&gt;&lt;span style="color:#008080;"&gt;2&lt;/span&gt; &lt;span style="color:#000000;"&gt;        {
&lt;/span&gt;&lt;span style="color:#008080;"&gt;3&lt;/span&gt; &lt;span style="color:#000000;"&gt;            PhoneApplicationService.Current.State[&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textoEscrito&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;] &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; textBox1.Text;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;4&lt;/span&gt; &lt;span style="color:#000000;"&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;De esta manera guardamos el texto cada vez que cambia.&lt;/p&gt;

&lt;p&gt;Cuando el programa se ve interrumpido por la llamada de teléfono y volvemos a la aplicación MainPage llama automáticamente al método OnNavigatedTo&amp;#160; (este evento ocurre cada vez que se carga una clase que deriva de Page). Nosotros lo sobrescribimos para que cuando se ejecute cargue los datos que hemos guardado anteriormente:&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c1f0966f-0b64-44b9-b026-3799ca1c70ce" class="wlWriterEditableSmartContent"&gt;&lt;pre style="width:723px;height:363px;background-color:White;overflow:auto;font-family:Microsoft Sans Serif;font-size:9,75;"&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt; 1&lt;/span&gt; &lt;span style="color:#000000;"&gt;      &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;override&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 2&lt;/span&gt; &lt;span style="color:#000000;"&gt;        {
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 3&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (PhoneApplicationService.Current.State.ContainsKey(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textoEscrito&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;))
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 4&lt;/span&gt; &lt;span style="color:#000000;"&gt;            {
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 5&lt;/span&gt; &lt;span style="color:#000000;"&gt;                textBox1.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;)PhoneApplicationService.Current.State[&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textoEscrito&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;];
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 6&lt;/span&gt; &lt;span style="color:#000000;"&gt;            }
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 7&lt;/span&gt; &lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 8&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (PhoneApplicationService.Current.State.ContainsKey(&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;desactivadoHora&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;))
&lt;/span&gt;&lt;span style="color:#008080;"&gt; 9&lt;/span&gt; &lt;span style="color:#000000;"&gt;            {
&lt;/span&gt;&lt;span style="color:#008080;"&gt;10&lt;/span&gt; &lt;span style="color:#000000;"&gt;                textBlock1.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;La aplicaci&amp;#243;n se desactivo a las: &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;11&lt;/span&gt; &lt;span style="color:#000000;"&gt;                textBlock1.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;+=&lt;/span&gt;&lt;span style="color:#000000;"&gt; ((DateTime)PhoneApplicationService.Current.State[&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;desactivadoHora&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;]).TimeOfDay.ToString();
&lt;/span&gt;&lt;span style="color:#008080;"&gt;12&lt;/span&gt; &lt;span style="color:#000000;"&gt;            }
&lt;/span&gt;&lt;span style="color:#008080;"&gt;13&lt;/span&gt; &lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;14&lt;/span&gt; &lt;span style="color:#000000;"&gt;          {
&lt;/span&gt;&lt;span style="color:#008080;"&gt;15&lt;/span&gt; &lt;span style="color:#000000;"&gt;                textBlock1.Text&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
&lt;/span&gt;&lt;span style="color:#008080;"&gt;16&lt;/span&gt; &lt;span style="color:#000000;"&gt;          }
&lt;/span&gt;&lt;span style="color:#008080;"&gt;17&lt;/span&gt; &lt;span style="color:#000000;"&gt;            
&lt;/span&gt;&lt;span style="color:#008080;"&gt;18&lt;/span&gt; &lt;span style="color:#000000;"&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Simplemente tenemos que comprobar que existen las claves que indicamos y en caso afirmativo mostrar la información.&lt;/p&gt;

&lt;p&gt;Ahora ejecutamos el programa e introducimos texto en el TextBox, para simular la llamada de teléfono o que abrimos otro programa pulsamos la tecla de Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen4_5F00_0EAB1F71.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" title="imagen4" border="0" alt="imagen4" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen4_5F00_thumb_5F00_53E3769A.png" width="255" height="466" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen5_5F00_2B649486.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" title="imagen5" border="0" alt="imagen5" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen5_5F00_thumb_5F00_5E5424ED.png" width="259" height="469" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando queramos ir hacia atrás, pulsamos la tecla de Volver y veremos una pantalla en la que se está recuperando la información:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen6_5F00_20E3C066.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" title="imagen6" border="0" alt="imagen6" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen6_5F00_thumb_5F00_73EE5D8A.png" width="261" height="471" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen7_5F00_7D671C00.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="imagen7" border="0" alt="imagen7" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/imagen7_5F00_thumb_5F00_175ADC23.png" width="264" height="476" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último aquí podéis ver la información recuperada y la hora a la que el programa quedo inactivo.&lt;/p&gt;

&lt;p&gt;Espero que os sirva a todos los que estáis programando en WP7, el código lo tenéis aquí abajo:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;iframe style="padding-bottom:0px;background-color:#fcfcfc;padding-left:0px;width:98px;padding-right:0px;height:115px;padding-top:0px;" title="Preview" marginheight="0" src="http://cid-997518c64337653b.office.live.com/embedicon.aspx/P%c3%bablico/DemoTombstoning.rar" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Saludos &lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wlEmoticon_2D00_smile_5F00_6EDBFA0E.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=185959" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[WP7] Almacenamiento de archivos en local</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2010/10/07/wp7-almacenamiento-de-archivos-en-local.aspx" /><id>/blogs/creneses/archive/2010/10/07/wp7-almacenamiento-de-archivos-en-local.aspx</id><published>2010-10-07T00:30:00Z</published><updated>2010-10-07T00:30:00Z</updated><content type="html">&lt;p align="justify"&gt;&lt;font size="2"&gt;Como todos sabréis a estas alturas el almacenamiento de archivos en local dentro los dispositivos con Windows Phone 7 ha cambiado bastante respecto de sus predecesores. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Microsoft está apostando fuerte por los servicios en la nube y este es un claro ejemplo en el que se nos invita a los desarrolladores a almacenar los datos de nuestra aplicación en un servicio a través de Internet. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Sin embargo almacenar datos de configuración, preferencias del usuario o datos como caché en la nube puede ser más incómodo que almacenarlos en local. Para lograr esto podemos utilizar el almacenamiento aislado o Isolated Storage.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;El Isolated Storage es un lugar de almacenamiento aislado del sistema y del resto de las aplicaciones. Tiene como ventaja fundamental que a estos espacios aislados no se puede acceder desde otras aplicaciones lo cual aporta más seguridad a las aplicaciones.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Vamos a ver un par de métodos para almacenar datos como la configuración de un programa que haga el usuario o los datos que se quieran cachear para que estén disponibles de manera más rápida.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;La primera es guardando los datos en app.config de la aplicación y la segunda guardando un archivo como tal dentro del espacio reservado para la aplicación móvil.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;font size="3"&gt;Usando el App.Config&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Bueno como siempre lo primero de todo será crear un nuevo proyecto, usaremos Silverlight para construir la aplicación de Windows Phone 7.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;La interfaz simplemente va a contener un textbox con el que vamos a introducir valores, el botón para dar la orden y un listbox donde iremos mostrando los datos almacenados.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/image_5F00_1007627D.png" width="216" height="403" /&gt; &lt;br /&gt;&lt;font size="2"&gt;Vamos a crear algunos métodos para facilitarnos el proceso de lectura y escritura, por un lado necesitamos poder almacenar el valor junto con la clave que lo identifica.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void EstablecerValor(string clave, string valor)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
                IsolatedStorageSettings.ApplicationSettings[clave] = valor;
            else
                IsolatedStorageSettings.ApplicationSettings.Add(clave, valor);

            IsolatedStorageSettings.ApplicationSettings.Save();
        }&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div align="justify"&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2" face="Verdana"&gt;Bueno, lo que hace este método es comprobar si la clave ya está contenida en el AppSettings, si lo está actualiza el valor y si no lo guarda como nuevo. &lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;Ahora necesitamos leer el valor introducido, para esto pasamos la clave al método ObtenerValor y en el caso de existir nos es devuelto. 
&lt;/font&gt;  &lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p align="justify"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private string ObtenerValor(string clave)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
                return IsolatedStorageSettings.ApplicationSettings[clave].ToString();
            else
                return default(string);
        }&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p align="left"&gt;&lt;font size="2"&gt;Ya solo necesitamos algunas funciones para conocer la cantidad de datos que tenemos guardados, rellenar la lista y actualizar el contador que&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;font size="2"&gt;vamos a utilizar.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private int CantidadClaves()
        {
            return IsolatedStorageSettings.ApplicationSettings.Count;
        }
&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;
&lt;font color="#000040"&gt;        private void RellenarLista()
        {
            listBox1.Items.Clear();

            for (int i = 0; i &amp;lt; CantidadClaves(); i++)
            {
                listBox1.Items.Add(ObtenerValor(i.ToString()));
            }

            ActualizarContador();
        }
&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;
&lt;font color="#000040"&gt;        private void ActualizarContador()
        {
            contador = CantidadClaves();
        }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;&lt;font size="2"&gt;Ahora en el evento Click del botón hacemos una llamada a EstablecerValor y luego relleno el listbox.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#333333" size="2"&gt; &lt;font color="#000040"&gt;       private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            EstablecerValor(contador.ToString(), txtEntrada.Text);
            RellenarLista();
        }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Los valores guardados permanecerán en el teléfono mientras este no se resetee. &lt;br /&gt;El código completo es este: &lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;     public partial class MainPage : PhoneApplicationPage
    {
        int contador = 0;

        public MainPage()
        {
            InitializeComponent();
            RellenarLista();
        }

        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            EstablecerValor(contador.ToString(), txtEntrada.Text);
            RellenarLista();
        }


&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private string ObtenerValor(string clave)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
                return IsolatedStorageSettings.ApplicationSettings[clave].ToString();
            else
                return default(string);
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void EstablecerValor(string clave, string valor)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
                IsolatedStorageSettings.ApplicationSettings[clave] = valor;
            else
                IsolatedStorageSettings.ApplicationSettings.Add(clave, valor);

            IsolatedStorageSettings.ApplicationSettings.Save();
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private int CantidadClaves()
        {
            return IsolatedStorageSettings.ApplicationSettings.Count;
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void RellenarLista()
        {
            listBox1.Items.Clear();

            for (int i = 0; i &amp;lt; CantidadClaves(); i++)
            {
                listBox1.Items.Add(ObtenerValor(i.ToString()));
            }

            ActualizarContador();
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void ActualizarContador()
        {
            contador = CantidadClaves();
        }

    }&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;strong&gt;&lt;font size="3" face="Verdana"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;strong&gt;&lt;font size="3" face="Verdana"&gt;Usando archivos&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Bueno, ahora usando el proyecto anterior o creando uno nuevo vamos a usar dos botones, uno para guardar en el archivo y otro para cargar sus datos, y dos textbox, uno para escribir y otro para mostrar el contenido de lo guardado.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Tendría el siguiente aspecto:&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/image1_5F00_4628DACC.png" width="216" height="407" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Los métodos más importantes son el de Guardar y el de Cargar información del archivo.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        public void Guardar(string texto, string archivo)
        {
            using (var almacenamiento = IsolatedStorageFile.GetUserStoreForApplication())
            using (var StreamEscritura = new IsolatedStorageFileStream(archivo, FileMode.Create, almacenamiento))
            using (var escritor = new StreamWriter(StreamEscritura))
            {
                escritor.Write(texto);
            }
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        public string Cargar(string archivo)
        {
            try
            {
                using (var almacenamiento = IsolatedStorageFile.GetUserStoreForApplication())
                using (var StreamLectura = new IsolatedStorageFileStream(archivo, FileMode.Open, almacenamiento))
                using (var lector = new StreamReader(StreamLectura))
                {
                    return lector.ReadToEnd();
                }
            }
            catch (IsolatedStorageException e)
            {
                return &amp;quot;No se ha encontrado el archivo + Excepción: &amp;quot; + e;
            }
        }&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;La forma de operar con el archivo es muy similar, obtenemos el espacio de almacenamiento de la aplicación mediante GetUserStoreForApplication. &lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Luego tenemos que usar una instancia de IsolatedStorageFileStream para poder manipular el archivo. Hay que indicar el nombre del archivo, el lugar donde está almacenado y como manipulamos el archivo, tenemos varias opciones para esto, Create, Open, Append, Truncate, etc. &lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Por último hacemos uso de un objeto StreamWriter o StreamReader para escribir o leer en el archivo. &lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;Os dejo aquí como quedaría todo el código de la aplicación:&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;    public partial class MainPage : PhoneApplicationPage
    {

        public MainPage()
        {
            InitializeComponent();
        }
&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;
&lt;font color="#000040"&gt;        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            Guardar(txtWriter.Text, &amp;quot;archivoPrueba.txt&amp;quot;);
            txtWriter.Text = &amp;quot;&amp;quot;;
        }

&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void btnCargar_Click(object sender, RoutedEventArgs e)
        {
           txtLoader.Text = Cargar(&amp;quot;archivoPrueba.txt&amp;quot;);
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        private void txtWriter_SelectionChanged(object sender, RoutedEventArgs e)
        {
            txtLoader.Text = &amp;quot;&amp;quot;;
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        public void Guardar(string texto, string archivo)
        {
            using (var almacenamiento = IsolatedStorageFile.GetUserStoreForApplication())
            using (var StreamEscritura = new IsolatedStorageFileStream(archivo, FileMode.Create, almacenamiento))
            using (var escritor = new StreamWriter(StreamEscritura))
            {
                escritor.Write(texto);
            }
        }

&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font color="#000040" size="2"&gt;        public string Cargar(string archivo)
        {
            try
            {
                using (var almacenamiento = IsolatedStorageFile.GetUserStoreForApplication())
                using (var StreamLectura = new IsolatedStorageFileStream(archivo, FileMode.Open, almacenamiento))
                using (var lector = new StreamReader(StreamLectura))
                {
                    return lector.ReadToEnd();
                }
            }
            catch (IsolatedStorageException e)
            {
                return &amp;quot;No se ha encontrado el archivo + Excepción: &amp;quot; + e;
            }
        }
 
    }&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div align="justify"&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2" face="Verdana"&gt;Como veis no es muy complicado hacer uso del IsolatedStorage en WP7 y nos permite tener en local datos de uso frecuente.&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: true; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font size="2" face="Verdana"&gt;Un saludo&lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-winkingsmile" alt="Gui&amp;ntilde;o" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/creneses/wlEmoticon_2D00_winkingsmile_5F00_6BB377CF.png" /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182952" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="WP7" scheme="http://geeks.ms/blogs/creneses/archive/tags/WP7/default.aspx" /><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>[ Windows 7] Cambio de idioma</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2009/08/10/windows-7-cambio-de-idioma.aspx" /><id>/blogs/creneses/archive/2009/08/10/windows-7-cambio-de-idioma.aspx</id><published>2009-08-10T11:20:00Z</published><updated>2009-08-10T11:20:00Z</updated><content type="html">&lt;p&gt;Por fin saco un ratillo para poner algo en el blog, en esta ocasi&amp;oacute;n vamos a ver un peque&amp;ntilde;o tip sobre como cambiar f&amp;aacute;cilmente el idioma de nuestro Windows 7.&lt;/p&gt;
&lt;p&gt;El jueves pasado sali&amp;oacute; a la luz la versi&amp;oacute;n RTM de Windows 7 para subscriptores de MSDN y de TechNet, bueno la imagen estaba disponible en ingl&amp;eacute;s y hab&amp;iacute;a que aplicar posteriormente el pack del idioma correspondiente.&lt;/p&gt;
&lt;p&gt;No es nada dif&amp;iacute;cil cambiar el idioma, pero si nunca lo has hecho o es la primera vez que tienes Windows 7, es normal que le pregunten a uno como se hace. As&amp;iacute; que este post va dedicado a todas esas personas que me buscan de servicio t&amp;eacute;cnico en verano &lt;img src="http://labloguera.net/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74906/462x480.aspx" width="388" border="0" height="401" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Inicialmente tenemos algo as&amp;iacute;, ingl&amp;eacute;s por todos lados, as&amp;iacute; que nos vamos a nuestro querido &amp;ldquo;Panel de Control&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74907/640x425.aspx" style="width:479px;height:318px;" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;En el podemos ver se&amp;ntilde;alada la secci&amp;oacute;n &amp;ldquo;Clock, Languaje, and Region&amp;rdquo; (un lugar id&amp;oacute;neo para cambiar el idioma &amp;iquest;no cre&amp;eacute;is? &lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;). Si pinchamos sobre ella veremos lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74908/640x429.aspx" style="width:479px;height:321px;" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;un menu en el que cambiar la fecha y la hora, y una segunda opci&amp;oacute;n donde cambiar el idioma.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74909/640x431.aspx" style="width:472px;height:318px;" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Si clickamos en la segunda opci&amp;oacute;n nos aparece un asistente para instalar o desinstalar idiomas, pulsamos en &amp;ldquo;Install display languajes&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://labloguera.net/photos/csharp/images/74910/640x430.aspx" width="473" border="0" height="319" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;En este paso nos da la opci&amp;oacute;n de bajarlo del sitio de Microsoft e instalarlo, o instalarlo directamente si ya disponemos del mismo, como es mi caso. Pulsamos sobre la segunda opci&amp;oacute;n y buscamos el archivo que contiene el idioma.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74911/640x426.aspx" width="480" border="0" height="319" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74912/640x433.aspx" width="479" border="0" height="324" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Ahora pulsamos en &amp;ldquo;Next&amp;rdquo; y aceptamos la licencia para comenzar el proceso de instalaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74913/640x431.aspx" width="479" border="0" height="322" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74914/640x430.aspx" width="477" border="0" height="320" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Cuando termina de instalarlo nos muestra los idiomas instalados, seleccionamos el &amp;ldquo;espa&amp;ntilde;ol&amp;rdquo; y pulsamos la casilla que hay m&amp;aacute;s abajo para que aplique el idioma a todo el sistema.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74915/640x425.aspx" width="479" border="0" height="318" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pulsamos sobre &amp;ldquo;Change display languaje&amp;rdquo; y nos pide reiniciar el sistema.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74916/640x433.aspx" width="479" border="0" height="324" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74917/465x480.aspx" width="403" border="0" height="416" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Al cabo de unos segundos nuestro sistema tiene un idioma un poco m&amp;aacute;s familiar &lt;img src="http://labloguera.net/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;
&lt;p&gt;Bueno, pues eso es todo, disfrutad de la playa o de los chaparrones que est&amp;aacute;n cayendo estos d&amp;iacute;as.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=153888" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="tips" scheme="http://geeks.ms/blogs/creneses/archive/tags/tips/default.aspx" /><category term="Windows 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+7/default.aspx" /></entry><entry><title>[ Windows 7 ] Cambiar el aspecto de la pantalla de login</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2009/06/18/windows-7-cambiar-el-aspecto-de-la-pantalla-de-login.aspx" /><id>/blogs/creneses/archive/2009/06/18/windows-7-cambiar-el-aspecto-de-la-pantalla-de-login.aspx</id><published>2009-06-18T12:44:00Z</published><updated>2009-06-18T12:44:00Z</updated><content type="html">&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;Hoy vamos a ver como cambiar el fondo de pantalla en el inicio de sesi&amp;oacute;n de Windows 7.&lt;/p&gt;
&lt;div style="TEXT-ALIGN:center;"&gt;&lt;img src="http://labloguera.net/photos/csharp/images/71785/original.aspx" border="0" alt="" /&gt;&lt;/div&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;Antes de nada, he visto que existen algunos programas que hacen el proceso que viene a continuaci&amp;oacute;n de manera casi autom&amp;aacute;tica, pero dado que despu&amp;eacute;s de probar varios he comprobado que unos funcionan y otros no, lo mejor creo que es hacerlo a mano (que por lo menos a mi no me falla).&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;Lo primero de todo es ver si tenemos la carpeta backgrounds en la siguiente direcci&amp;oacute;n: &lt;strong&gt;C:\Windows\System32\oobe\info\backgrounds&lt;/strong&gt;, si no la tenemos debemos ir hasta el directorio oobe, crear &lt;em&gt;info&lt;/em&gt; y dentro de este &lt;em&gt;backgrounds&lt;/em&gt;.&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;A continuaci&amp;oacute;n vamos a editar el registro de Windows, ya sab&amp;eacute;is, Inicio -&amp;gt; Ejecutar y pon&amp;eacute;is Regedit, debemos ir hasta:&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family:Calibri;font-size:x-small;"&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\&lt;/span&gt;&lt;span style="font-family:Calibri;font-size:x-small;"&gt;Authentication\LogonUI\Background&lt;/span&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Y fijarnos si tiene la clave &lt;strong&gt;OEMBackground&lt;/strong&gt; puesto a 1. Si no es as&amp;iacute; o no existe lo creamos pulsando con el bot&amp;oacute;n derecho del rat&amp;oacute;n en la parte derecha del registro y a&amp;ntilde;adiendo un valor DWORD con el nombre que he indicado, lo pon&amp;eacute;is a 1 y cerr&amp;aacute;is el registro.&lt;/p&gt;
&lt;p align="justify"&gt;Ahora vamos a preparar la imagen de fondo, escoged la que quer&amp;aacute;is, a ser posible de la resoluci&amp;oacute;n de vuestra pantalla, la guard&amp;aacute;is en la carpeta &lt;strong&gt;backgrounds&lt;/strong&gt; con el nombre &lt;strong&gt;backgroundDefault.jpg&lt;/strong&gt; y con un tama&amp;ntilde;o que no supere los &lt;strong&gt;256kb&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Solo queda reiniciar vuestra m&amp;aacute;quina para comprobar el resultado.&lt;/p&gt;
&lt;p align="justify"&gt;Saludetes&lt;/p&gt;
&lt;p align="justify"&gt;P.D.: los archivos que he utilizado los podeis encontrar en mi &lt;a target="_blank" href="http://cid-997518c64337653b.profile.live.com/"&gt;Skydrive&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=150693" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="tips" scheme="http://geeks.ms/blogs/creneses/archive/tags/tips/default.aspx" /><category term="Windows 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Para comenzar con Windows 7</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2009/05/15/para-comenzar-con-windows-7.aspx" /><id>/blogs/creneses/archive/2009/05/15/para-comenzar-con-windows-7.aspx</id><published>2009-05-14T22:23:00Z</published><updated>2009-05-14T22:23:00Z</updated><content type="html">&lt;p&gt;Me acabo de encontrar con 3 cursos gratuitos que ha sacado &lt;strong&gt;Microsoft Learning&lt;/strong&gt; sobre &lt;strong&gt;Windows 7&lt;/strong&gt; para ir conociendo este nuevo sistema operativo.&lt;/p&gt;
&lt;p&gt;Los cursos seg&amp;uacute;n el tipo de usuario que seas los pod&amp;eacute;is encontrar en estos enlaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para &lt;a target="_blank" href="http://www.microsoft.com/learning/elearning/course/10125.mspx"&gt;usuarios&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Para &lt;a target="_blank" href="http://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceId=38b7b771-a840-4bc6-a518-c8cf79c9a24c&amp;amp;language=en-US&amp;amp;country=US&amp;amp;locale=en-US&amp;amp;style=Learning"&gt;profesionales&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Para &lt;a target="_blank" href="http://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceId=0d4cdfd6-b1ad-4a91-899a-7866f498735e&amp;amp;language=en-US&amp;amp;country=US&amp;amp;locale=en-US&amp;amp;style=Learning"&gt;empresarios&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludetes &amp;nbsp;;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=148690" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Windows 7" scheme="http://geeks.ms/blogs/creneses/archive/tags/Windows+7/default.aspx" /><category term="cursos" scheme="http://geeks.ms/blogs/creneses/archive/tags/cursos/default.aspx" /></entry><entry><title>Variables globales en un sitio ASP.NET</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2009/04/25/variables-globales-en-un-sitio-asp-net.aspx" /><id>/blogs/creneses/archive/2009/04/25/variables-globales-en-un-sitio-asp-net.aspx</id><published>2009-04-25T09:50:00Z</published><updated>2009-04-25T09:50:00Z</updated><content type="html">&lt;p align="justify"&gt;Me encuentro ahora mismo desarrollando un sitio web en ASP.NET&amp;nbsp; para una asignatura de la universidad y esta tarde me he encontrado con que necesito tener accesibles algunos datos en cualquiera de las p&amp;aacute;ginas que componen el sitio web, as&amp;iacute; que voy a dejar aqu&amp;iacute; las dos formas de hacer esto que he encontrado. &lt;/p&gt;
&lt;p align="justify"&gt;Para poneros en situaci&amp;oacute;n os dir&amp;eacute; que mi sitio web est&amp;aacute; compuesto por una MasterPage, varias p&amp;aacute;ginas de contenido asociadas a la MasterPage y dos p&amp;aacute;ginas m&amp;aacute;s que no est&amp;aacute;n asociadas; la MasterPage tiene un control de LoginName del cual quiero obtener el nombre del usuario que est&amp;aacute; logueado en cada momento en cualquier p&amp;aacute;gina. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;em&gt;&lt;span style="text-decoration:underline;"&gt;Aclaraci&amp;oacute;n&lt;/span&gt;&lt;/em&gt;: podemos obtener el nombre de usuario logueado en el site mediante &amp;quot;this.User.Identity.Name&amp;quot;, que ser&amp;iacute;a mucho m&amp;aacute;s correcto para obtener el nombre del usuario en cualquier momento. Sin embargo la idea es ejemplificar como llevar un dato de una parte a otra del site en situaciones en las que no dispongamos del tipo de facilidades como la que tenemos en el caso concreto que he utilizado de ejemplo en el post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;En el Web.config&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Para hacer esto he visto varias maneras, la primera de todas se trata de guardar los datos en el Web.config en la zona de &amp;quot;appSettings&amp;quot;, esto lo har&amp;iacute;a de la siguiente forma: &lt;/p&gt;
&lt;p align="justify"&gt;Primero a&amp;ntilde;adiendo una clave a la zona de appSettings en el Web.config &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;appSettings&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;username&amp;quot; value=&amp;quot;valor&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/appSettings&amp;gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y luego en el c&amp;oacute;digo de la p&amp;aacute;gina en la que lo necesitemos podemos obtener o modificar el valor de la clave mediante: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;System.Configuration.ConfigurationSettings.AppSettings[&amp;quot;username&amp;quot;]&amp;nbsp; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;En el Global.asax&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Otra manera que he visto es utilizando el archivo Global.asax. Este archivo opcional en los desarrollos de ASP.NET nos permite manejar eventos que ocurren a nivel de la aplicaci&amp;oacute;n y de sesi&amp;oacute;n, tambi&amp;eacute;n nos permite declarar valores que necesitemos entre las diferentes solicitudes. &lt;/p&gt;
&lt;p align="justify"&gt;El archivo Global.asax para que funcione tiene que permanecer en la ra&amp;iacute;z de la aplicaci&amp;oacute;n y solo se admite uno por aplicaci&amp;oacute;n ejecutada. Si tenemos alg&amp;uacute;n otro archivo de este tipo en alg&amp;uacute;n subdirectorio no se tendr&amp;aacute;n en cuenta por la aplicaci&amp;oacute;n. &lt;/p&gt;
&lt;p align="justify"&gt;Cuando declaremos una variable dentro de Global.asax estar&amp;aacute; disponible en todas las p&amp;aacute;ginas de la aplicaci&amp;oacute;n. Lo podemos hacer de la siguiente manera: &lt;/p&gt;
&lt;p align="justify"&gt;En el fichero Global.asax declaramos una variable string y luego en Session_Start otorgamos el valor de la cadena a un objeto de tipo Session que en mi caso se llama valorCadena. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;public class Global : System.Web.HttpApplication &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string cadena=&amp;quot;valor inicial&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Application_Start(object sender, EventArgs e) { } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Session_Start(object sender, EventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session[&amp;quot;valorCadena&amp;quot;] = cadena; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;... &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...... &lt;/p&gt;
&lt;p&gt;Luego en la p&amp;aacute;gina que lo necesitemos podemos escribir valores: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session[&amp;quot;valorCadena&amp;quot;] = &amp;quot;la_cadena_que_quiera_poner&amp;quot;; &lt;/p&gt;
&lt;p&gt;y leer de la variable: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = (string)Session[&amp;quot;valorCadena&amp;quot;]; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aporte&lt;/strong&gt;: &lt;a target="_blank" href="http://jdieguez.wordpress.com"&gt;Jorge Dieguez&lt;/a&gt;&amp;nbsp;nos hace un comentario interesante: &amp;quot;&lt;em&gt;..te recomiendo que en lugar de una(o varias) varaibles sueltas uses una clase que te centralize el acceso a la infromacion de contexto(usuario,su perfil, o lo que sea), esta clase es la responable de almacenear el estado en algun lugar(por ejemplo en la sesion) la idea es que la aplicacion no sepa como y donde se guarda la informacion de contexto..&amp;quot;. &lt;/em&gt;Quiz&amp;aacute;s es la soluci&amp;oacute;n m&amp;aacute;s elegante de todas las planteadas.&lt;/p&gt;
&lt;p&gt;Pues nada, si hay alguna correcci&amp;oacute;n o manera m&amp;aacute;s de hacer esto ponedlo en los comentarios y as&amp;iacute; vamos completando entre todos el post&lt;/p&gt;
&lt;p&gt;P.D.: Si quer&amp;eacute;is m&amp;aacute;s informaci&amp;oacute;n sobre Global.asax pod&amp;eacute;is leer algo m&amp;aacute;s &lt;a href="http://mredison.wordpress.com/2009/04/19/qu-es-el-globalasax/"&gt;aqu&amp;iacute; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludetes :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=147434" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET/default.aspx" /><category term="ASP.NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Minority Report??</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/11/17/minority-report.aspx" /><id>/blogs/creneses/archive/2008/11/17/minority-report.aspx</id><published>2008-11-17T08:51:38Z</published><updated>2008-11-17T08:51:38Z</updated><content type="html">&lt;p align="justify"&gt;Desde hace algún tiempo me interesan bastante las nuevas formas de interacción hombre - máquina, y me gusta conocer como se va avanzando en todos los aspectos, no solo facilitar la interfaces más simples e intuitivas sino también el modo en como podemos manejarlas. &lt;/p&gt; &lt;p align="justify"&gt;Pues bien hoy me he encontrado con algo que no esperaba ver por lo menos hasta dentro de un tiempo. Al final va a ser verdad eso de que el límite está en nuestra imaginación.&lt;/p&gt; &lt;p&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=2229299&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" width="400" height="225" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"&gt; &lt;br /&gt;&lt;a href="http://vimeo.com/2229299"&gt;g-speak overview 1828121108&lt;/a&gt; from &lt;a href="http://vimeo.com/user922585"&gt;john underkoffler&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=116174" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="tecnolog&amp;#237;a" scheme="http://geeks.ms/blogs/creneses/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx" /><category term="UX" scheme="http://geeks.ms/blogs/creneses/archive/tags/UX/default.aspx" /></entry><entry><title>XNA 3.0 ¡¡ ya está aquí !!</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/10/31/xna-3-0-161-161-ya-est-225-aqu-237.aspx" /><id>/blogs/creneses/archive/2008/10/31/xna-3-0-161-161-ya-est-225-aqu-237.aspx</id><published>2008-10-31T11:46:47Z</published><updated>2008-10-31T11:46:47Z</updated><content type="html">&lt;p align="justify"&gt;Pues ya tenemos en la calle la versión 3.0 de XNA y con bastantes cositas nuevas.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/XNA3.0yaestaqu_94D0/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 0px 0px 10px;border-right-width:0px;" height="207" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/XNA3.0yaestaqu_94D0/image_thumb_1.png" width="197" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;Vaya tela! como pasa el tiempo, XNA es el primer producto (y espero que no sea el último) que empecé a probar desde que era muy pequeñito en su versión beta y poco a poco se nos va haciendo mayor y facilitándonos las cosas.&lt;/p&gt; &lt;p align="justify"&gt;En esta ocasión las nuevas características tienen mucho que ver con la comunidad de desarrolladores que se está formando en torno a la XBOX en XBOX Live Community Games. Como por ejemplo, un modo se ha añadido un modo Trial, que permite al desarrollador activarlo para que la gente antes de comprarlo pruebe si le gusta o no.&lt;/p&gt; &lt;p align="justify"&gt;Se ha añadido a las características del modo multijugador la posibilidad de invitar a otros jugadores a participar en el juego que más nos guste.&lt;/p&gt; &lt;p align="justify"&gt;Además soporta C# 3.0, LINQ y Visual Studio 2008.&lt;/p&gt; &lt;p align="justify"&gt;Bueno ahora solo queda que nos pongamos a hacer cosillas con XNA. No os olvidéis de que no tenemos que pasar a mano todas nuestras demos hechas en la versión 2.0, sino que simplemente con abrir el proyecto desde visual estudio nos hace un backup de la solución y la posterior conversión del proyecto a 3.0.&lt;/p&gt; &lt;p align="justify"&gt;Os dejo aquí los enlaces:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;Descarga de &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;displaylang=en" target="_blank"&gt;XNA 3.0&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;Reseña en el &lt;a href="http://blogs.msdn.com/xna/archive/2008/10/30/xna-game-studio-3-0-is-live.aspx" target="_blank"&gt;blog del equipo de XNA&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=110176" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="xna" scheme="http://geeks.ms/blogs/creneses/archive/tags/xna/default.aspx" /><category term="Noticias" scheme="http://geeks.ms/blogs/creneses/archive/tags/Noticias/default.aspx" /></entry><entry><title>[ Useful tools ] PptPlex y Microsoft Speed Launch</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/08/21/useful-tools-pptplex-y-microsoft-speed-launch.aspx" /><id>/blogs/creneses/archive/2008/08/21/useful-tools-pptplex-y-microsoft-speed-launch.aspx</id><published>2008-08-21T00:59:39Z</published><updated>2008-08-21T00:59:39Z</updated><content type="html">&lt;p align="justify"&gt;&amp;quot;Paseando&amp;quot; por la red de vez en cuando te encuentras con algún tipo de software que aunque no se convierte en vital, si puede llegar a ser interesante en determinadas ocasiones. &lt;/p&gt; &lt;p align="justify"&gt;Es el caso de las dos herramientas con las que me he encontrado en el sitio &lt;a href="http://www.officelabs.com" target="_blank"&gt;www.officelabs.com&lt;/a&gt;, que para quien no conozca este lugar es de esos rincones chulos que se han puesto de moda en los últimos años entre las grandes empresas informáticas. En estas webs colocan implementaciones de ideas o prototipos para ver que tal resultan entre la gente, unas terminan avanzando como espero que sea el caso de &lt;a href="http://www.officelabs.com/projects/pptPlex/Pages/default.aspx" target="_blank"&gt;&lt;strong&gt;PptPlex&lt;/strong&gt;&lt;/a&gt; y otras se quedan por el camino.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;PptPlex, una forma diferente de hacer presentaciones&lt;/strong&gt;&lt;/h4&gt; &lt;p align="justify"&gt;Como os podréis imaginar este software tiene mucho que ver con PowerPoint, se trata de un plugin que enriquece en buena manera nuestras presentaciones, permitiéndonos hacer zoom de una manera sencilla sobre la pantalla, deslizarnos de una diapositiva a otra y como podéis ver en el vídeo que adjunto agrupar dentro de una diapositiva índice todas las demás de forma que la presentación queda más vistosa.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:a46b7649-3d84-4b4f-85a6-0625141fc96f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:340px;padding-top:0px;"&gt;&lt;div&gt;&lt;embed src="http://images.video.msn.com/flash/soapbox1_1.swf" quality="high" width="340" height="287" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;amp;v=f362631f-c86c-4547-a544-9b8eda9975e3&amp;amp;from=writer"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;Como siempre en este tipo de cosas no tiene garantía de ningún tipo, ni saben si lo van a traducir y para los que hacéis Webcasts este tipo de presentaciones no funcionan con Microsoft Office Live Meeting. Aun así me parece una utilidad altamente recomendable.&lt;/p&gt; &lt;p align="justify"&gt;La web de descarga y consulta: &lt;a href="http://www.officelabs.com/projects/pptPlex/Pages/default.aspx" target="_blank"&gt;pptPlex&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Microsoft Speed Launch o como tener tus programas más a mano&lt;/strong&gt;&lt;/h4&gt; &lt;p align="justify"&gt;Bueno, este programa no es mas que un lanzador de aplicaciones pero me ha gustado mucho la forma en la que podemos agregar nuevos accesos a nuestras aplicaciones preferidas.&lt;/p&gt; &lt;p align="justify"&gt;La forma de activar el lanzador es mediante la combinación de teclas Windows + C, nos aparecerá esta ventana:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/UsefultoolsPptPlexyMicrosoftSpeedLaunch_14B1/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 0px 0px;border-right-width:0px;" height="130" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/UsefultoolsPptPlexyMicrosoftSpeedLaunch_14B1/image_thumb.png" width="378" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;en ella podemos ver que en la parte inferior aparecen cinco botones. Aquí es donde se irán colocando las cinco aplicaciones más usadas.&lt;/p&gt; &lt;p align="justify"&gt;¿Como agregamos aplicaciones a este lanzador? es bien simple, por defecto aparece en la parte inferior derecha una diana donde tenemos que arrastrar los accesos directos. Si arrastramos un programa, aparece ya el path de destino del programa y le podemos asignar un nombre más corto para poderlo buscar con mas rapidez. &lt;/p&gt; &lt;p align="justify"&gt;Podemos agregar todas las que queramos, pero como solo aparecen las 5 más usadas, si queremos ejecutar otra diferentes tendremos que escribir el nombre corto que le hallamos dado en el cuadro de texto y pulsar &amp;quot;Launch&amp;quot;.&lt;/p&gt; &lt;p align="justify"&gt;Lo mejor es un vídeo aclaratorio:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:282b4165-f3d3-4c73-8d66-63f195ceebfd" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:329px;padding-top:0px;"&gt;&lt;div&gt;&lt;embed src="http://images.video.msn.com/flash/soapbox1_1.swf" quality="high" width="329" height="278" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;amp;v=1558aa3d-5a30-48a3-8cff-db458f1a7151&amp;amp;from=writer"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;La web de descarga y consulta: &lt;a href="http://www.officelabs.com/projects/speedlaunch/Pages/default.aspx" target="_blank"&gt;speed Launch&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Bueno, por hoy nada más.&lt;/p&gt; &lt;p&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95460" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Useful tools" scheme="http://geeks.ms/blogs/creneses/archive/tags/Useful+tools/default.aspx" /></entry><entry><title>Microsoft TouchWall</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/05/15/microsoft-touchwall.aspx" /><id>/blogs/creneses/archive/2008/05/15/microsoft-touchwall.aspx</id><published>2008-05-14T23:27:00Z</published><updated>2008-05-14T23:27:00Z</updated><content type="html">&lt;p&gt;Bueno antes de nada lo primero que quiero decir es:&lt;/p&gt; &lt;p&gt;&lt;b&gt;¡¡QUIERO UNOOOOOOOOOOOOO!!&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:3b4c6bfd-350e-4154-a94a-2638a8a25523" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YPrfqdl55D0"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/YPrfqdl55D0" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Después de ver el vídeo seguro que vosotros también queréis uno :D.&lt;/p&gt; &lt;p&gt;Este es otro prototipo de pantallas multitactil en las que está investigando Microsoft. Es la misma idea que Surface pero en la pared y menos avanzado (por lo menos por lo que he visto en el video). &lt;/p&gt; &lt;p&gt;Surface se valía de las cámaras que contiene la mesa para detectar las posiciones y además interactuaba con objetos como móviles o PDAs.&lt;/p&gt; &lt;p&gt;TouchWall es un software llamado Plex que va sobre Windows Vista y detecta los movimientos mediante una serie de láseres y una cámara de infrarrojos.&lt;/p&gt; &lt;p&gt;A ver cuando dejan de ponernos los dientes largos :D, bueno a lo mejor al final me tengo que hacer uno yo mismo :P&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:a2c7cd14-65ad-4f6f-a086-826dfa0dc829" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5s5EvhHy7eQ"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/5s5EvhHy7eQ" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Saludetes &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=85706" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Vista" scheme="http://geeks.ms/blogs/creneses/archive/tags/Vista/default.aspx" /><category term="tecnolog&amp;#237;a" scheme="http://geeks.ms/blogs/creneses/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx" /></entry><entry><title>Trabajo en el equipo de desarrollo del .NET Framework</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/05/05/trabajo-en-el-equipo-de-desarrollo-del-net-framework.aspx" /><id>/blogs/creneses/archive/2008/05/05/trabajo-en-el-equipo-de-desarrollo-del-net-framework.aspx</id><published>2008-05-04T22:17:00Z</published><updated>2008-05-04T22:17:00Z</updated><content type="html">
&lt;p&gt;Navegando por la red me encuentro con un post de Brad Abrams, en el que comenta que están buscando gente para entrar a desarrollar algunas partes del Framework.&lt;/p&gt;
  
&lt;p&gt;El que quiera cambio de aires ya sabe donde puede probar [:D]&lt;/p&gt;
  
&lt;p&gt;El blog con la noticia lo tenéis &lt;a href="http://blogs.msdn.com/brada/archive/2008/04/30/job-openings-working-on-the-net-framework-product-team.aspx" target="_blank"&gt;aquí&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;Saludetes [H]&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=84769" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Noticias" scheme="http://geeks.ms/blogs/creneses/archive/tags/Noticias/default.aspx" /><category term=".NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET/default.aspx" /></entry><entry><title>Jugando con videos en Expression Blend</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2008/03/06/jugando-con-videos-en-expression-blend.aspx" /><id>/blogs/creneses/archive/2008/03/06/jugando-con-videos-en-expression-blend.aspx</id><published>2008-03-06T09:09:14Z</published><updated>2008-03-06T09:09:14Z</updated><content type="html">&lt;p style="text-align:justify;"&gt;Hac&amp;#237;a ya tiempo que no escrib&amp;#237;a nada en el blog y ya iba siendo hora de aportar algo a la comunidad de nuevo, aunque solo fuera un poquito.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Aprovechando el &lt;a href="http://geeks.ms/blogs/cristian/archive/2008/03/05/silverlight-microsoft-lanza-silverlight-2-0-beta-1-y-blend-2-5-march-preview.aspx" target="_blank"&gt;anuncio de la salida de la preview de Blend 2.5&lt;/a&gt; quiero mostrar como reproducir un v&amp;#237;deo en WPF de una forma diferente a como lo hacemos normalmente con el &lt;a href="http://www.microsoft.com/windows/windowsmedia/es/" target="_blank"&gt;Windows Media Player&lt;/a&gt; o con el &lt;a href="http://www.videolan.org" target="_blank"&gt;VideoLan&lt;/a&gt;, lo vamos a mostrar inclinado sobre una ventana en 2D.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Normalmente cuando necesitamos hacer un reproductor multimedia muy r&amp;#225;pidamente en &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa497342.aspx" target="_blank"&gt;Windows Forms&lt;/a&gt;, lo que hacemos es directamente agregar la dll del &lt;a href="http://www.microsoft.com/windows/windowsmedia/es/" target="_blank"&gt;Windows Media Player&lt;/a&gt;. &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Bueno pues en WPF la forma m&amp;#225;s r&amp;#225;pida es agregar un componente que ya viene hecho denominado &lt;strong&gt;MediaElement&lt;/strong&gt;.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="348" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_1.png" width="441" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Lo malo de este elemento es que solamente podemos ver el v&amp;#237;deo tal cual agregamos el componente a la ventana, es decir, una vez le hemos dado el tama&amp;#241;o adecuado no podemos girarlo, ni inclinarlo ni nada por el estilo, as&amp;#237; que necesitamos una soluci&amp;#243;n.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Para ir al siguiente paso hay un &amp;quot;peque&amp;#241;o&amp;quot; concepto que debemos conocer que son los brushes o brochas. Cuando vemos una aplicaci&amp;#243;n en WPF toda ella est&amp;#225; siendo pintada por brochas, las brochas pueden pintar desde simples colores s&amp;#243;lidos, a gradientes e im&amp;#225;genes :D&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Existe un tipo de brocha denominada VisualBrush que permite pintar el &amp;#225;rea que nosotros queremos de id&amp;#233;ntica forma a como est&amp;#225; en otro lugar de nuestra aplicaci&amp;#243;n. &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;La manera de hacerlo es la siguiente, una vez tenemos en el dise&amp;#241;ador agregado un componente MediaElement con su propiedad source inicializada (esto lo hac&amp;#233;is mediante los men&amp;#250;s de la derecha y si no la veis arriba del todo ten&amp;#233;is un buscador, pon&amp;#233;is source, puls&amp;#225;is enter y aparece), con el componente seleccionado os vais al men&amp;#250; &lt;em&gt;Tools&lt;/em&gt;, luego a &lt;em&gt;Make Brush Resource&lt;/em&gt; y en el men&amp;#250; que aparece puls&amp;#225;is sobre &lt;em&gt;Make Visual Brush Resource &lt;/em&gt;y le dais un nombre. &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;De esta manera ya tenemos una brocha para pintar el elemento que queramos.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Ahora podemos agregar un componente &lt;strong&gt;image&lt;/strong&gt; a nuestra ventana, al cual giraremos e inclinaremos a nuestro antojo, pero para ello tenemos que convertirlo en un objeto 3D.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Con el objeto image seleccionado, pulsamos sobre &lt;strong&gt;Tools&lt;/strong&gt; y luego en &lt;strong&gt;Make Image 3D&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_16.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="181" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_7.png" width="210" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Nuestro objeto image cambia y se convierte en un objeto &lt;strong&gt;Viewport3D&lt;/strong&gt; con varias secciones en su interior. Por medio &lt;strong&gt;objects and timeline&lt;/strong&gt; seleccionamos el modelo (&lt;strong&gt;Model&lt;/strong&gt;).&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_18.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="302" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_8.png" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Mientras en el dise&amp;#241;ador debemos ver un rect&amp;#225;ngulo con tres vectores en el centro.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_20.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="165" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_9.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Bueno pues tal cual hemos seleccionado Model nos vamos a sus propiedades y en &lt;strong&gt;Materials&lt;/strong&gt; aparecen dos opciones &lt;strong&gt;Material&lt;/strong&gt; y &lt;strong&gt;BackMaterial&lt;/strong&gt;, que se refieren a las texturas que podemos dar al modelo, nosotros solo lo vamos a ver por la parte de delante as&amp;#237; que pulsamos sobre &lt;strong&gt;Material&lt;/strong&gt;, y en el men&amp;#250; que aparece pulsamos sobre &lt;strong&gt;Brush Resources&lt;/strong&gt;.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_24.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="294" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_11.png" width="289" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Es la parte delimitada de rojo, luego en &lt;em&gt;&lt;strong&gt;Local Brush Resources&lt;/strong&gt;&lt;/em&gt; est&amp;#225; la brocha que hemos creado anteriormente y que debemos seleccionar.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;El dise&amp;#241;ador debe tener un aspecto parecido a esto:&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_26.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="308" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_12.png" width="387" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Si ejecut&amp;#225;is debe comenzar a reproducirse el v&amp;#237;deo que hall&amp;#225;is indicado de forma autom&amp;#225;tica tanto en el MediaElement como en el modelo 3D.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;A continuaci&amp;#243;n seleccionamos la herramienta &lt;em&gt;&lt;strong&gt;Camera Orbit&lt;/strong&gt;&lt;/em&gt; o directamente pulsamos &amp;quot;c&amp;quot;, si pinchamos sobre el modelo vemos que podemos rotarlo y girarlo a nuestro antojo.&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Veremos algo as&amp;#237;:&lt;/p&gt;  &lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_34.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="288" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_16.png" width="394" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Ahora si ejecutamos ya podemos ver la reproducci&amp;#243;n inclinada y girada. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_36.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="298" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ComomostrarvdeosdeunaformadiferenteconBl_958/image_thumb_17.png" width="396" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p style="text-align:justify;"&gt;Bueno de momento eso es todo por hoy, otro d&amp;#237;a m&amp;#225;s. :D&lt;/p&gt;  &lt;p&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=77679" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="WPF" scheme="http://geeks.ms/blogs/creneses/archive/tags/WPF/default.aspx" /><category term=".NET 3.0" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET+3.0/default.aspx" /><category term=".NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET/default.aspx" /><category term="Xaml" scheme="http://geeks.ms/blogs/creneses/archive/tags/Xaml/default.aspx" /></entry><entry><title>Nueva versión de XNA :D</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2007/12/14/nueva-versi-243-n-de-xna-d.aspx" /><id>/blogs/creneses/archive/2007/12/14/nueva-versi-243-n-de-xna-d.aspx</id><published>2007-12-14T11:57:00Z</published><updated>2007-12-14T11:57:00Z</updated><content type="html">&lt;p&gt;Después de un periodo muy corto en fase beta, desde el 19 de noviembre hasta hoy, ya tenemos la segunda versión definitiva de XNA Game Studio.&lt;/p&gt;  &lt;p&gt;Implementa muchas mejoras, la que a mí me parece más importante es la que permite el desarrollo de juego en red y multijugador. Pero bueno el resto de mejoras lo podéis ver &lt;a href="http://creators.xna.com/Education/whatsnew.aspx" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Si tengo tiempo este finde miro las mejoras y las comento; por cierto con la última versión se va a iniciar la versión 2008 del concurso &lt;a href="http://www.dreambuildplay.com/main/default.aspx" target="_blank"&gt;Dream Build Play&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Bueno dejo los enlaces para que cacharreis si queréis:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=df80d533-ba87-40b4-abe2-1ef12ea506b7&amp;amp;DisplayLang=en" target="_blank"&gt;XNA Game Studio&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=15fb9169-4a25-4dca-bf40-9c497568f102&amp;amp;DisplayLang=en" target="_blank"&gt;XNA Framework Redistributable 2.0&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Voy a seguir con el currele, :(&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=57253" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="xna" scheme="http://geeks.ms/blogs/creneses/archive/tags/xna/default.aspx" /><category term="xbox 360" scheme="http://geeks.ms/blogs/creneses/archive/tags/xbox+360/default.aspx" /><category term="Noticias" scheme="http://geeks.ms/blogs/creneses/archive/tags/Noticias/default.aspx" /><category term=".NET" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET/default.aspx" /></entry><entry><title>Expression Blend: creando un "Motion Path"</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2007/12/10/expression-blend-creando-un-quot-motion-path-quot.aspx" /><id>/blogs/creneses/archive/2007/12/10/expression-blend-creando-un-quot-motion-path-quot.aspx</id><published>2007-12-10T10:16:34Z</published><updated>2007-12-10T10:16:34Z</updated><content type="html">&lt;p&gt;Vamos a ver como podemos crear un &amp;quot;Motion Path&amp;quot; para un elemento de WPF con la herramienta de dise&amp;#241;o Expression Blend.&lt;/p&gt;  &lt;p&gt;Lo primero de todo arrancamos nuestro Expressi&amp;#243;n Blend, en mi caso es la versi&amp;#243;n 2, la preview de septiembre que pod&amp;#233;is encontrar &lt;a href="http://www.microsoft.com/expression/products/download.aspx?key=blend2preview" target="_blank"&gt;aqu&amp;#237;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="259" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_thumb.png" width="410" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Creamos un nuevo proyecto (Ctrl+Shift+N) y elegimos crear una aplicaci&amp;#243;n para WPF, le damos un nombre y pulsamos sobre &amp;quot;OK&amp;quot;.&lt;/p&gt;  &lt;p&gt;Ahora lo que haremos ser&amp;#225; arrastrar un rect&amp;#225;ngulo sobre la ventana que estamos dise&amp;#241;ando, con el rect&amp;#225;ngulo seleccionado pulsamos sobre propiedades y en la secci&amp;#243;n de brochas (&lt;b&gt;brushes&lt;/b&gt;) reseteamos la propiedad &lt;b&gt;Fill &lt;/b&gt;para que el relleno de la figura sea transparente.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image5.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="277" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image5_thumb.png" width="343" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="298" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_thumb_2.png" width="219" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Luego lo que tenemos que hacer es ir al men&amp;#250; &lt;b&gt;Object&lt;/b&gt;, luego a &lt;b&gt;Path&lt;/b&gt; y pulsamos en la opci&amp;#243;n &lt;b&gt;Convert to Motion Path&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="334" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_thumb_3.png" width="372" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Aparece una ventana donde debemos indicar el elemento que va a recorrer ese camino:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="397" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_thumb_4.png" width="280" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Elegimos el bot&amp;#243;n que ten&amp;#237;amos agregado y autom&amp;#225;ticamente se coloca en el camino que hemos definido. Se crea una nueva l&amp;#237;nea de tiempo autom&amp;#225;ticamente, podemos pulsar sobre el play para ver el nuevo efecto.&lt;/p&gt;  &lt;p&gt;Adem&amp;#225;s por defecto el tiempo que tarda en recorrer el camino son 2 segundos, pero podemos editar esto a nuestro gusto buscando el elemento &lt;b&gt;Motion Path &lt;/b&gt;del bot&amp;#243;n y alargamos o acortamos el tiempo que dura el recorrido.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="242" alt="image" src="http://geeks.ms/blogs/creneses/WindowsLiveWriter/ExpressionBlendcreandounMotionPath_14B2A/image_thumb_5.png" width="366" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Tambi&amp;#233;n se pueden hacer &lt;b&gt;Motion Path &lt;/b&gt;con otras figuras predefinidas o con l&amp;#237;neas que dibujemos con el l&amp;#225;piz o la pluma. &lt;/p&gt;  &lt;p&gt;La verdad es que es una forma f&amp;#225;cil de animar un logo o crear un peque&amp;#241;o efecto en nuestra aplicaci&amp;#243;n.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Saludetes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=56022" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="WPF" scheme="http://geeks.ms/blogs/creneses/archive/tags/WPF/default.aspx" /><category term="Vista" scheme="http://geeks.ms/blogs/creneses/archive/tags/Vista/default.aspx" /><category term="tips" scheme="http://geeks.ms/blogs/creneses/archive/tags/tips/default.aspx" /><category term="Xam" scheme="http://geeks.ms/blogs/creneses/archive/tags/Xam/default.aspx" /><category term=".NET 3.0" scheme="http://geeks.ms/blogs/creneses/archive/tags/.NET+3.0/default.aspx" /></entry><entry><title>System.Console.WriteLine("¡Hola, mundo!");</title><link rel="alternate" type="text/html" href="/blogs/creneses/archive/2007/12/02/system-console-writeline-quot-161-hola-mundo-quot.aspx" /><id>/blogs/creneses/archive/2007/12/02/system-console-writeline-quot-161-hola-mundo-quot.aspx</id><published>2007-12-02T18:34:00Z</published><updated>2007-12-02T18:34:00Z</updated><content type="html">&lt;p&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;Hola a todos!!! &lt;img src="http://geeks.ms/emoticons/emotion-2.gif" alt="Big Smile" /&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;Mi nombre es César Reneses y quiero agradecer a Rodrigo Corral la invitación a postear en esta estupenda comunidad&amp;nbsp;de la que todos los días aprendo&amp;nbsp;algo nuevo. &lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;Ahora mismo me encuentro estudiando infor&lt;/span&gt;&lt;/font&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;mática en Albacete (España), haciendo &amp;quot;chambas&amp;quot; en .NET (mola!!! :D) y administrando &lt;a class="" href="http://labloguera.net/" target="_blank"&gt;LaBloguera.net&lt;/a&gt;. Me gusta mucho la tecnología, sobre todo saber como funciona cada cosa&amp;nbsp;y jugar con ella &lt;img src="http://geeks.ms/emoticons/emotion-15.gif" alt="Geeked" /&gt;,&amp;nbsp;así que desde&amp;nbsp;ahora amplio mi radio de emisión a &lt;font color="#0000ff"&gt;&lt;a class="" href="http://geeks.ms/" target="_blank"&gt;Geeks.ms&lt;/a&gt;&lt;/font&gt; donde mostraré mis andanzas con .NET y todo lo que aprenda con&amp;nbsp;la tecnología que caiga en mis manos. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;Saludetes &lt;img src="http://geeks.ms/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/span&gt; &lt;/font&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;font face="Times New Roman" size="3"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=54309" width="1" height="1"&gt;</content><author><name>creneses</name><uri>http://geeks.ms/members/creneses/default.aspx</uri></author><category term="Saludo" scheme="http://geeks.ms/blogs/creneses/archive/tags/Saludo/default.aspx" /></entry></feed>