<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Fernando Cortés Hierro!! MCP MCAD MCSD.net</title><link>http://blogs.clearscreen.com/nandy/</link><description>Articulos tecnológicos en Español</description><managingEditor>Fernando Cortés Hierro</managingEditor><dc:language>es-ES</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Silverlight toolkit released</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14157.aspx</link><pubDate>Wed, 29 Oct 2008 09:08:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14157.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/14157.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14157.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/14157.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/14157.aspx</trackback:ping><description>&lt;p&gt;Con la versión final de Silverlight 2.0 pensaba que aparecería algun control de más que hemos echado en falta durarnte el periodo de Betas y demás. Por suerte en codeplex &lt;a title="http://www.codeplex.com/Silverlight" href="http://www.codeplex.com/Silverlight"&gt;http://www.codeplex.com/Silverlight&lt;/a&gt; tenemos un set de controles típicos ya desarrollados.&lt;/p&gt; &lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Silverlight&amp;amp;DownloadId=47808" /&gt; &lt;/p&gt; &lt;p&gt;Ha fecha de hoy existen dos conjuntos de controles, controles estables para ser usados tranquilamente y controles en pruebas:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;En pruebas&lt;/strong&gt;&lt;/p&gt; &lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#AutoCompleteBox"&gt;AutoCompleteBox&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#NumericUpDown"&gt;NumericUpDown&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#Viewbox"&gt;Viewbox&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#Expander"&gt;Expander&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%203&amp;amp;referringTitle=Home&amp;amp;ANCHOR#ImplicitStyleManager"&gt;ImplicitStyleManager&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%202&amp;amp;referringTitle=Home"&gt;Charting&lt;/a&gt;&lt;/b&gt;  &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Estables&lt;/strong&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#TreeView"&gt;TreeView&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#DockPanel"&gt;DockPanel&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#WrapPanel"&gt;WrapPanel&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20November%202008%20overview&amp;amp;referringTitle=Home&amp;amp;ANCHOR#Label"&gt;Label&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#HeaderedContentControl"&gt;HeaderedContentControl&lt;/a&gt;&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;amp;referringTitle=Home&amp;amp;ANCHOR#HeaderedItemsControl"&gt;HeaderedItemsControl&lt;/a&gt;&lt;/b&gt;  &lt;p&gt; &lt;/p&gt; &lt;p&gt;A disfrutarlos pues :)&lt;/p&gt;&lt;/li&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/14157.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Con la versión final de Silverlight 2.0 pensaba que aparecería algun control de más que hemos echado en falta durarnte el periodo de Betas y demás. Por suerte en codeplex <a title="http://www.codeplex.com/Silverlight" href="http://www.codeplex.com/Silverlight">http://www.codeplex.com/Silverlight</a> tenemos un set de controles típicos ya desarrollados.</p> <p><img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Silverlight&amp;DownloadId=47808" /> </p> <p>Ha fecha de hoy existen dos conjuntos de controles, controles estables para ser usados tranquilamente y controles en pruebas:</p> <p><strong>En pruebas</strong></p> <li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#AutoCompleteBox">AutoCompleteBox</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#NumericUpDown">NumericUpDown</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#Viewbox">Viewbox</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#Expander">Expander</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%203&amp;referringTitle=Home&amp;ANCHOR#ImplicitStyleManager">ImplicitStyleManager</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%202&amp;referringTitle=Home">Charting</a></b>  <p> </p> <p><strong>Estables</strong></p> </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#TreeView">TreeView</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#DockPanel">DockPanel</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#WrapPanel">WrapPanel</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20November%202008%20overview&amp;referringTitle=Home&amp;ANCHOR#Label">Label</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#HeaderedContentControl">HeaderedContentControl</a></b>  </li><li><b><a href="http://www.codeplex.com/Silverlight/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201&amp;referringTitle=Home&amp;ANCHOR#HeaderedItemsControl">HeaderedItemsControl</a></b>  <p> </p> <p>A disfrutarlos pues :)</p></li><img src ="http://blogs.clearscreen.com/nandy/aggbug/14157.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Silverlight Beta2 to RTM: OnClick Event Failed</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14151.aspx</link><pubDate>Wed, 29 Oct 2008 02:41:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14151.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/14151.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/29/14151.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/14151.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/14151.aspx</trackback:ping><description>&lt;p&gt;Volvemos a esta serie de posts relacionados con problemas que nos podemos encontrar a la hora de migrar una aplicación Silverlight Beta 2 a la versión final. En este caso supongamos que tenemos una aplicación silverlight con el siguiente código Xaml:&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="0,0,0,0"&lt;/span&gt; &lt;span class="attr"&gt;Source&lt;/span&gt;&lt;span class="kwrd"&gt;="Images/background.jpg"&lt;/span&gt; &lt;span class="attr"&gt;Stretch&lt;/span&gt;&lt;span class="kwrd"&gt;="Fill"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control1&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Stretch"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Stretch"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control2&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="92.719"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="8,8,0,0"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="176"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control3&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="mainMenu"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;

&lt;p&gt;Donde cada &lt;em&gt;UserControl&lt;/em&gt; Control contienen un botón que responde al evento &lt;em&gt;MouseLeftButtonUp. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;¿Qué ocurre si migramos esta aplicación a la versión final de silverlight? Pues ocurre que no ocurre nada, es decir, por mucho que apretemos el botón izquierdo del ratón sobre el botón, contenido en cada control, no ocurre nada.&lt;/p&gt;
&lt;p&gt;El por qué lo tenemos en el tipo de panel que contiene la imagen y los tres controles de usuario. ¿No veis que falte algo? Pues sí, no están definidas las filas ni las columnas. Otro de los problemas de la Beta 2 en cuenta a permisividad. Por tanto añadiendo la definición de filas y columnas y definición que parte del Grid ocupa cada objeto, el código fuente resultante y funcional seria el siguiente:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="180"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="0,0,0,0"&lt;/span&gt; &lt;span class="attr"&gt;Source&lt;/span&gt;&lt;span class="kwrd"&gt;="Images/background.jpg"&lt;/span&gt; &lt;span class="attr"&gt;Stretch&lt;/span&gt;&lt;span class="kwrd"&gt;="Fill"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="attr"&gt;                         Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;RowSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;ColumnSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;p&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control1&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Stretch"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Stretch"&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span class="attr"&gt;                         Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;RowSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;ColumnSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control2&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="92.719"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="8,8,0,0"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;                         &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="176"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Labs:Control3&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="mainMenu"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;

&lt;p&gt;Ahora si que funcionan nuestros botones :)&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/14151.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Volvemos a esta serie de posts relacionados con problemas que nos podemos encontrar a la hora de migrar una aplicación Silverlight Beta 2 a la versión final. En este caso supongamos que tenemos una aplicación silverlight con el siguiente código Xaml:</p> <div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span>    <span class="kwrd">&lt;</span><span class="html">Grid</span> <span class="attr">x:Name</span><span class="kwrd">="LayoutRoot"</span><span class="kwrd">&gt;</span></pre><pre><span class="lnum">   2:  </span>        <span class="kwrd">&lt;</span><span class="html">Image</span> <span class="attr">Margin</span><span class="kwrd">="0,0,0,0"</span> <span class="attr">Source</span><span class="kwrd">="Images/background.jpg"</span> <span class="attr">Stretch</span><span class="kwrd">="Fill"</span> <span class="kwrd">/&gt;</span></pre><pre class="alt"><span class="lnum">   3:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control1</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Stretch"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Stretch"</span><span class="kwrd">/&gt;</span></pre><pre><span class="lnum">   4:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control2</span> <span class="attr">Height</span><span class="kwrd">="92.719"</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Left"</span> <span class="attr">Margin</span><span class="kwrd">="8,8,0,0"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Top"</span> <span class="attr">Width</span><span class="kwrd">="176"</span><span class="kwrd">/&gt;</span></pre><pre class="alt"><span class="lnum">   5:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control3</span> <span class="attr">x:Name</span><span class="kwrd">="mainMenu"</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Right"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Top"</span><span class="kwrd">/&gt;</span></pre><pre><span class="lnum">   6:  </span>    <span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span></pre></div>
<style type="text/css"><![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]></style>

<p>Donde cada <em>UserControl</em> Control contienen un botón que responde al evento <em>MouseLeftButtonUp. </em></p>
<p>¿Qué ocurre si migramos esta aplicación a la versión final de silverlight? Pues ocurre que no ocurre nada, es decir, por mucho que apretemos el botón izquierdo del ratón sobre el botón, contenido en cada control, no ocurre nada.</p>
<p>El por qué lo tenemos en el tipo de panel que contiene la imagen y los tres controles de usuario. ¿No veis que falte algo? Pues sí, no están definidas las filas ni las columnas. Otro de los problemas de la Beta 2 en cuenta a permisividad. Por tanto añadiendo la definición de filas y columnas y definición que parte del Grid ocupa cada objeto, el código fuente resultante y funcional seria el siguiente:</p>
<div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span>    <span class="kwrd">&lt;</span><span class="html">Grid</span> <span class="attr">x:Name</span><span class="kwrd">="LayoutRoot"</span><span class="kwrd">&gt;</span></pre><pre><span class="lnum">   2:  </span>        <span class="kwrd">&lt;</span><span class="html">Grid.RowDefinitions</span><span class="kwrd">&gt;</span></pre><pre class="alt"><span class="lnum">   3:  </span>            <span class="kwrd">&lt;</span><span class="html">RowDefinition</span> <span class="attr">Height</span><span class="kwrd">="100"</span><span class="kwrd">/&gt;</span></pre><pre><span class="lnum">   4:  </span>            <span class="kwrd">&lt;</span><span class="html">RowDefinition</span> <span class="attr">Height</span><span class="kwrd">="*"</span><span class="kwrd">/&gt;</span></pre><pre class="alt"><span class="lnum">   5:  </span>        <span class="kwrd">&lt;/</span><span class="html">Grid.RowDefinitions</span><span class="kwrd">&gt;</span></pre><pre><span class="lnum">   6:  </span>        <span class="kwrd">&lt;</span><span class="html">Grid.ColumnDefinitions</span><span class="kwrd">&gt;</span></pre><pre class="alt"><span class="lnum">   7:  </span>            <span class="kwrd">&lt;</span><span class="html">ColumnDefinition</span> <span class="attr">Width</span><span class="kwrd">="180"</span><span class="kwrd">/&gt;</span></pre><pre><span class="lnum">   8:  </span>            <span class="kwrd">&lt;</span><span class="html">ColumnDefinition</span> <span class="attr">Width</span><span class="kwrd">="*"</span><span class="kwrd">/&gt;</span></pre><pre class="alt"><span class="lnum">   9:  </span>        <span class="kwrd">&lt;/</span><span class="html">Grid.ColumnDefinitions</span><span class="kwrd">&gt;</span></pre><pre><span class="lnum">  10:  </span>        <span class="kwrd">&lt;</span><span class="html">Image</span> <span class="attr">Margin</span><span class="kwrd">="0,0,0,0"</span> <span class="attr">Source</span><span class="kwrd">="Images/background.jpg"</span> <span class="attr">Stretch</span><span class="kwrd">="Fill"</span> </pre><pre><span class="attr">                         Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">RowSpan</span><span class="kwrd">="2"</span> <span class="attr">Grid</span>.<span class="attr">ColumnSpan</span><span class="kwrd">="2"</span><span class="kwrd">/&gt;</span></pre><pre class="alt"><p><span class="lnum">  11:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control1</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Stretch"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Stretch"</span> </p><p><span class="attr">                         Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">RowSpan</span><span class="kwrd">="2"</span> <span class="attr">Grid</span>.<span class="attr">ColumnSpan</span><span class="kwrd">="2"</span><span class="kwrd">/&gt;</span></p></pre><pre><span class="lnum">  12:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control2</span> <span class="attr">Height</span><span class="kwrd">="92.719"</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Left"</span> <span class="attr">Margin</span><span class="kwrd">="8,8,0,0"</span> </pre><pre>                         <span class="attr">VerticalAlignment</span><span class="kwrd">="Top"</span> <span class="attr">Width</span><span class="kwrd">="176"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span><span class="kwrd">/&gt;</span></pre><pre class="alt"><span class="lnum">  13:  </span>        <span class="kwrd">&lt;</span><span class="html">Labs:Control3</span> <span class="attr">x:Name</span><span class="kwrd">="mainMenu"</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Right"</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Top"</span> <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">="0"</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">="1"</span><span class="kwrd">/&gt;</span></pre><pre><span class="lnum">  14:  </span>    <span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span></pre></div>
<style type="text/css"><![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]></style>

<p>Ahora si que funcionan nuestros botones :)</p><img src ="http://blogs.clearscreen.com/nandy/aggbug/14151.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Silverlight Beta2 to RTM: Catastrophic failure</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/22/14019.aspx</link><pubDate>Wed, 22 Oct 2008 16:42:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/22/14019.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/14019.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/22/14019.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/14019.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/14019.aspx</trackback:ping><description>&lt;p&gt;Migrando y migrando aplicaciones, demos y demás que tengo por aqui en Silverlight Beta2 a la versión final, me he encontrado con problemas en tiempo de ejecución con un error que asusta al principio pero que investigando un poco se encuentra el por qué del mismo. El mensaje de error es: Catastrophic failure (Excepción de HRESULT: 0x8000FFFF (E_UNEXPECTED)), el cual lo podemos ver en la siguiente imagen.&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.fernandocortes.net/Couldnotdownloadt.Checkwebserversettings_14B6C/ErrorParaBlog_thumb.jpg" /&gt; &lt;/p&gt; &lt;p&gt;El problema viene dado en la permisividad que nos daban las versiones Beta de Silverlight, a la hora de añadir elementos al diccionario de recursos de un elemento de tipo FrameworkElement. Es decir, el siguiente código fallaría una vez migrado a Silverlight 2.0:&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Storyboard &lt;/span&gt;Story = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Storyboard&lt;/span&gt;();
&lt;span style="color: #2b91af"&gt;DoubleAnimation &lt;/span&gt;da = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DoubleAnimation&lt;/span&gt;();
da.To = -200;
da.Duration = &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.FromSeconds(20);
Story.Children.Add(da);

LayoutRoot.Resources.Add(&lt;span style="color: blue"&gt;null&lt;/span&gt;, Story);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Y la solución pasa por dar un valor correcto al parámetro key:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Storyboard &lt;/span&gt;Story = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Storyboard&lt;/span&gt;();
&lt;span style="color: #2b91af"&gt;DoubleAnimation &lt;/span&gt;da = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DoubleAnimation&lt;/span&gt;();
da.To = -200;
da.Duration = &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.FromSeconds(speed);
Story.Children.Add(da);

LayoutRoot.Resources.Add(&lt;span style="color: #a31515"&gt;"story"&lt;/span&gt;, Story);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/14019.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Migrando y migrando aplicaciones, demos y demás que tengo por aqui en Silverlight Beta2 a la versión final, me he encontrado con problemas en tiempo de ejecución con un error que asusta al principio pero que investigando un poco se encuentra el por qué del mismo. El mensaje de error es: Catastrophic failure (Excepción de HRESULT: 0x8000FFFF (E_UNEXPECTED)), el cual lo podemos ver en la siguiente imagen.</p> <p><img src="http://images.fernandocortes.net/Couldnotdownloadt.Checkwebserversettings_14B6C/ErrorParaBlog_thumb.jpg" /> </p> <p>El problema viene dado en la permisividad que nos daban las versiones Beta de Silverlight, a la hora de añadir elementos al diccionario de recursos de un elemento de tipo FrameworkElement. Es decir, el siguiente código fallaría una vez migrado a Silverlight 2.0:</p> <p> </p><pre class="code"><span style="color: #2b91af">Storyboard </span>Story = <span style="color: blue">new </span><span style="color: #2b91af">Storyboard</span>();
<span style="color: #2b91af">DoubleAnimation </span>da = <span style="color: blue">new </span><span style="color: #2b91af">DoubleAnimation</span>();
da.To = -200;
da.Duration = <span style="color: #2b91af">TimeSpan</span>.FromSeconds(20);
Story.Children.Add(da);

LayoutRoot.Resources.Add(<span style="color: blue">null</span>, Story);</pre><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>
<p> </p>
<p>Y la solución pasa por dar un valor correcto al parámetro key:</p>
<p> </p><pre class="code"><span style="color: #2b91af">Storyboard </span>Story = <span style="color: blue">new </span><span style="color: #2b91af">Storyboard</span>();
<span style="color: #2b91af">DoubleAnimation </span>da = <span style="color: blue">new </span><span style="color: #2b91af">DoubleAnimation</span>();
da.To = -200;
da.Duration = <span style="color: #2b91af">TimeSpan</span>.FromSeconds(speed);
Story.Children.Add(da);

LayoutRoot.Resources.Add(<span style="color: #a31515">"story"</span>, Story);</pre><a href="http://11011.net/software/vspaste"></a><img src ="http://blogs.clearscreen.com/nandy/aggbug/14019.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>MIME Types: Could not download the silverlight application. Check web server settings</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/20/14014.aspx</link><pubDate>Mon, 20 Oct 2008 08:01:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/20/14014.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/14014.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/20/14014.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/14014.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/14014.aspx</trackback:ping><description>&lt;p&gt;Ahora que ya tenemos &lt;a href="http://silverlight.net/GetStarted" target="_blank"&gt;Siverlight 2.0&lt;/a&gt; en la calle, nos podemos animar a desplegar nuestra aplicación a nuestros servidores, empresas de hosting y demás donde tengamos nuestros sites alojados. ¿Qué puede ocurrir casi siempre?, que no tengamos bien configurados los MIME Types y por tanto al intentar ejecutar la aplicación una vez desplegada tengamos el siguiente error que se ve en la imagen:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src="http://images.fernandocortes.net/Couldnotdownloadt.Checkwebserversettings_14B6C/ErrorParaBlog_thumb.jpg" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;La solución pasa por añadir los siguientes&lt;strong&gt; MIME Types&lt;/strong&gt; necesarios para hacer funcionar nuestra aplicación Silverlight&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;.xap - application/x-silverlight-app&lt;br /&gt;.manifest - application/manifest&lt;br /&gt;.xaml - application/xaml+xml&lt;br /&gt;.dll - application/x-msdownload&lt;br /&gt;.application - application/x-ms-application&lt;br /&gt;.xbap - application/x-ms-xbap&lt;br /&gt;.deploy - application/octet-stream&lt;br /&gt;.xps - application/vnd.ms-xpsdocument&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/14014.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Ahora que ya tenemos <a href="http://silverlight.net/GetStarted" target="_blank">Siverlight 2.0</a> en la calle, nos podemos animar a desplegar nuestra aplicación a nuestros servidores, empresas de hosting y demás donde tengamos nuestros sites alojados. ¿Qué puede ocurrir casi siempre?, que no tengamos bien configurados los MIME Types y por tanto al intentar ejecutar la aplicación una vez desplegada tengamos el siguiente error que se ve en la imagen:</p>
<p> </p>
<p><img src="http://images.fernandocortes.net/Couldnotdownloadt.Checkwebserversettings_14B6C/ErrorParaBlog_thumb.jpg" /> </p>
<p> </p>
<p>La solución pasa por añadir los siguientes<strong> MIME Types</strong> necesarios para hacer funcionar nuestra aplicación Silverlight<strong>:</strong></p>
<p>.xap - application/x-silverlight-app<br />.manifest - application/manifest<br />.xaml - application/xaml+xml<br />.dll - application/x-msdownload<br />.application - application/x-ms-application<br />.xbap - application/x-ms-xbap<br />.deploy - application/octet-stream<br />.xps - application/vnd.ms-xpsdocument</p><img src ="http://blogs.clearscreen.com/nandy/aggbug/14014.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Composite Application for WPF</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/15/13944.aspx</link><pubDate>Wed, 15 Oct 2008 06:04:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/15/13944.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/13944.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/15/13944.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/13944.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/13944.aspx</trackback:ping><description>&lt;p&gt;Windows Presentation Foundation esta siendo tomado más en serio para la creación de aplicaciones cliente ricas a nivel empresarial, diferenciadoras y pensadas en el usuario final (aqui me diran que siempre se piensa en el usuario final y yo digo que tararí!!). Bueno a lo que vamos, nos piden que desarrollemos una aplicación con WPF que mejore la interfaz de usuario, experiencia del usuario, y en ocasiones su productividad (provocando acciones naturales que redundan en facilidad y rapidez de uso), y lógicamente que mantenga la funcionalidad de la aplicación predecesora.&lt;/p&gt; &lt;p&gt;Estamos en un escenario real, el cual ya no es una aplicación piloto sencillita realizada por dos o tres personas, sino una en la que necesitamos la participación de un equipo de desarrollo o varios, trabajando conjuntamente y bien orquestados. Aqui es donde entran los chicos del equipo de patterns &amp;amp; practices que han desarrollado una serie de recursos que facilitan precisamente esto que hemos planteado, el desarrollo de aplicaciones WPF modulares donde intervienen varios equipos ayudando a los arquitectos de software a plantear una arquitectura modular, escalable y donde la nueva funcionalidad sea sencilla de añadir.&lt;/p&gt; &lt;p&gt;Entre los activos que tenemos disponibles destacan:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Una guía explicativa donde se centran en diferentes aspectos de arquitectura  &lt;/li&gt;&lt;li&gt;Hands-on-Lab  &lt;/li&gt;&lt;li&gt;Ejemplo de aplicación WPF utilizando estas prácticas  &lt;/li&gt;&lt;li&gt;Framework arquitectural&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;La dirección de principal de codeplex es la siguiente: &lt;a title="http://www.codeplex.com/CompositeWPF" href="http://www.codeplex.com/CompositeWPF"&gt;http://www.codeplex.com/CompositeWPF&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc707819.aspx" target="_blank"&gt;Mas información&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/Cc707819.practices(en-us,MSDN.10).png" /&gt;&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/13944.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Windows Presentation Foundation esta siendo tomado más en serio para la creación de aplicaciones cliente ricas a nivel empresarial, diferenciadoras y pensadas en el usuario final (aqui me diran que siempre se piensa en el usuario final y yo digo que tararí!!). Bueno a lo que vamos, nos piden que desarrollemos una aplicación con WPF que mejore la interfaz de usuario, experiencia del usuario, y en ocasiones su productividad (provocando acciones naturales que redundan en facilidad y rapidez de uso), y lógicamente que mantenga la funcionalidad de la aplicación predecesora.</p> <p>Estamos en un escenario real, el cual ya no es una aplicación piloto sencillita realizada por dos o tres personas, sino una en la que necesitamos la participación de un equipo de desarrollo o varios, trabajando conjuntamente y bien orquestados. Aqui es donde entran los chicos del equipo de patterns &amp; practices que han desarrollado una serie de recursos que facilitan precisamente esto que hemos planteado, el desarrollo de aplicaciones WPF modulares donde intervienen varios equipos ayudando a los arquitectos de software a plantear una arquitectura modular, escalable y donde la nueva funcionalidad sea sencilla de añadir.</p> <p>Entre los activos que tenemos disponibles destacan:</p> <ul> <li>Una guía explicativa donde se centran en diferentes aspectos de arquitectura  </li><li>Hands-on-Lab  </li><li>Ejemplo de aplicación WPF utilizando estas prácticas  </li><li>Framework arquitectural</li></ul> <p> </p> <p>La dirección de principal de codeplex es la siguiente: <a title="http://www.codeplex.com/CompositeWPF" href="http://www.codeplex.com/CompositeWPF">http://www.codeplex.com/CompositeWPF</a></p> <p><a href="http://msdn.microsoft.com/en-us/library/cc707819.aspx" target="_blank">Mas información</a></p> <p><img src="http://i.msdn.microsoft.com/Cc707819.practices(en-us,MSDN.10).png" /></p><img src ="http://blogs.clearscreen.com/nandy/aggbug/13944.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>User Experience Driven Design</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/10/13905.aspx</link><pubDate>Fri, 10 Oct 2008 06:54:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/10/13905.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/13905.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/10/13905.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/13905.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/13905.aspx</trackback:ping><description>&lt;p&gt;El pasado julio, &lt;a href="http://www.cynergysystems.com/blogs/page/carsonhager?entry=lunch_with_steve_ballmer" target="_blank"&gt;Carson Hager&lt;/a&gt;, el presidente y fundador de &lt;a href="http://www.cynergysystems.com" target="_blank"&gt;Cynergy&lt;/a&gt; empresa dedicada al desarrollo RIA con Adoble Flex/Air y Microsoft Silverlight/WPF, nos cuenta pequeños detalles de una comida organizada en la Microsoft Worldwide Partner Conference donde participó el propio Steve Ballmer.  &lt;/p&gt;&lt;p&gt;De sus palabras escritas se extraen dos interesantes puntos:  &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Que Microsoft está trabajando muy duro para ponerse a la par (y superar si puede) el trabajo realizado en el mundo Adobe y reproducirlo en el mundo Microsoft.&lt;/li&gt; &lt;li&gt;Las altas instancias de Microsoft creen y por tanto apostarán, por que el diseño de software dirigido hacia la mejora de la experiencia del usuario será el futuro del desarrollo de software. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Yo también opino que el año próximo será muy interesante en el mundo UX. &lt;/p&gt;&lt;p&gt;PD: Que pena que Cynergy no este en España :) &lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/13905.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>El pasado julio, <a href="http://www.cynergysystems.com/blogs/page/carsonhager?entry=lunch_with_steve_ballmer" target="_blank">Carson Hager</a>, el presidente y fundador de <a href="http://www.cynergysystems.com" target="_blank">Cynergy</a> empresa dedicada al desarrollo RIA con Adoble Flex/Air y Microsoft Silverlight/WPF, nos cuenta pequeños detalles de una comida organizada en la Microsoft Worldwide Partner Conference donde participó el propio Steve Ballmer.  </p><p>De sus palabras escritas se extraen dos interesantes puntos:  </p><ul> <li>Que Microsoft está trabajando muy duro para ponerse a la par (y superar si puede) el trabajo realizado en el mundo Adobe y reproducirlo en el mundo Microsoft.</li> <li>Las altas instancias de Microsoft creen y por tanto apostarán, por que el diseño de software dirigido hacia la mejora de la experiencia del usuario será el futuro del desarrollo de software. </li></ul> <p>Yo también opino que el año próximo será muy interesante en el mundo UX. </p><p>PD: Que pena que Cynergy no este en España :) </p><img src ="http://blogs.clearscreen.com/nandy/aggbug/13905.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Silverlight 2 Release Candidate (Developer)</title><link>http://blogs.clearscreen.com/nandy/archive/2008/10/02/13843.aspx</link><pubDate>Thu, 02 Oct 2008 05:38:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/10/02/13843.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/13843.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/10/02/13843.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/13843.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/13843.aspx</trackback:ping><description>&lt;p&gt;Un poco tarde…Sí! Pero más vale tarde que nunca. El pasado 25 de septiembre &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx" target="_blank"&gt;Scott Guthrie&lt;/a&gt; en su blog avisó de la publicación de la primera Release Candidate de Silverlight 2.&lt;/p&gt; &lt;p&gt;Es una buena excusa para ir migrando nuestras aplicaciones Silverlight Beta 2 a esta versión que ya será muy similar a la versión final para estar preparados. Entre otras cosas hay que tener claro que esta versión es la Developer Runtime, pensada precisamente para que nos vayamos preparando a la versión final los desarrolladores, más que los usuarios finales :)&lt;/p&gt; &lt;p&gt;Y como ya ocurrió con el paso de la Beta 1 a la Beta 2, existen los consabidos &lt;em&gt;Breaking Changes &lt;/em&gt;entre la Beta 2 y la RC.&lt;/p&gt; &lt;p&gt;No descubrimos la pólvora si decimos que ya hay un documento donde se especifican dichos cambios cuando compilemos con la RC y aquello escupa errores a diestro y siniestro: &lt;a href="http://download.microsoft.com/download/6/F/E/6FE1F43D-9D0C-4346-AD08-602DF9BCB3CF/BreakingChangesBetweenBeta2andRelease.doc" target="_blank"&gt;Breaking Change Between Beta2 and Release&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Y cosas nuevas y como podemos leer en el post de Scott, entre los controles tenemos: PasswordBox, ProgressBar y ComboBox (Ea, ya va tomando forma esto, ahora a ver si para la versión final nos añaden el un &lt;strong&gt;WrapPanel&lt;/strong&gt;), solución de bugs, Skins Controls y demás.&lt;/p&gt; &lt;p&gt;Como menciona este hombre y aunque ya hay un post suyo sobre eso, me parece interesante escribir un post sobre Visual State Manager en Castellano y con su código de ejemplo para descargar.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Casi lo olvido, el link donde está dicha versión: &lt;a title="http://silverlight.net/GetStarted/sl2rc0.aspx" href="http://silverlight.net/GetStarted/sl2rc0.aspx"&gt;http://silverlight.net/GetStarted/sl2rc0.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/13843.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Un poco tarde…Sí! Pero más vale tarde que nunca. El pasado 25 de septiembre <a href="http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx" target="_blank">Scott Guthrie</a> en su blog avisó de la publicación de la primera Release Candidate de Silverlight 2.</p> <p>Es una buena excusa para ir migrando nuestras aplicaciones Silverlight Beta 2 a esta versión que ya será muy similar a la versión final para estar preparados. Entre otras cosas hay que tener claro que esta versión es la Developer Runtime, pensada precisamente para que nos vayamos preparando a la versión final los desarrolladores, más que los usuarios finales :)</p> <p>Y como ya ocurrió con el paso de la Beta 1 a la Beta 2, existen los consabidos <em>Breaking Changes </em>entre la Beta 2 y la RC.</p> <p>No descubrimos la pólvora si decimos que ya hay un documento donde se especifican dichos cambios cuando compilemos con la RC y aquello escupa errores a diestro y siniestro: <a href="http://download.microsoft.com/download/6/F/E/6FE1F43D-9D0C-4346-AD08-602DF9BCB3CF/BreakingChangesBetweenBeta2andRelease.doc" target="_blank">Breaking Change Between Beta2 and Release</a></p> <p>Y cosas nuevas y como podemos leer en el post de Scott, entre los controles tenemos: PasswordBox, ProgressBar y ComboBox (Ea, ya va tomando forma esto, ahora a ver si para la versión final nos añaden el un <strong>WrapPanel</strong>), solución de bugs, Skins Controls y demás.</p> <p>Como menciona este hombre y aunque ya hay un post suyo sobre eso, me parece interesante escribir un post sobre Visual State Manager en Castellano y con su código de ejemplo para descargar.</p> <p> </p> <p>Casi lo olvido, el link donde está dicha versión: <a title="http://silverlight.net/GetStarted/sl2rc0.aspx" href="http://silverlight.net/GetStarted/sl2rc0.aspx">http://silverlight.net/GetStarted/sl2rc0.aspx</a></p><img src ="http://blogs.clearscreen.com/nandy/aggbug/13843.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Las Cosas Claras: Desde Javascript interactuar con Silverlight</title><link>http://blogs.clearscreen.com/nandy/archive/2008/07/04/12803.aspx</link><pubDate>Fri, 04 Jul 2008 01:09:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/07/04/12803.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/12803.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/07/04/12803.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/12803.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/12803.aspx</trackback:ping><description>&lt;p&gt;En el último post de la serie esta que comencé de "Las Cosas Claras" estuvimos viendo como podíamos acceder al DOM del explorador para, en el ejemplo, llamar a funciones javascript. Pues bien, hoy veremos como hacer precisamente lo contrario.&lt;/p&gt; &lt;p&gt;En el siguiente ejemplo veremos como desde javascript podemos provocar cambios en el Silverlight, en este caso cambiar la orientación de los elementos de un &lt;strong&gt;StackPanel&lt;/strong&gt;, pero también podríamos provocar el inicio de una animación o pararla, etc.&lt;/p&gt; &lt;p&gt;En primer lugar utilizaremos el siguiente namespace ya que contiene lo necesario para realizar esto:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Windows.Browser;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Centrándonos en la página principal del Silverlight &lt;em&gt;Page.xaml&lt;/em&gt;. El código XAML será muy sencillo, un simple StackPanel con varios botones:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="White"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Rojo" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="Red"/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Verde" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="Green"/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Azul" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="Blue"/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Amarillo" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="Yellow"/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Blanco" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="White"/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button &lt;/span&gt;&lt;span style="color: red"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Negro" &lt;/span&gt;&lt;span style="color: red"&gt;Background&lt;/span&gt;&lt;span style="color: blue"&gt;="Black"/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Y en el código fuente debemos registrar la clase &lt;strong&gt;MiTipoScriptable&lt;/strong&gt; para poderla usar desde javascript de la siguiente manera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el evento Loaded de la página registraremos el objeto que será usados para acceder desde javascript al método. &lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;HtmlPage&lt;/span&gt;.RegisterScriptableObject(&lt;span style="color: #a31515"&gt;"slObject"&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Y por último decoraremos un método de la clase &lt;strong&gt;Page,&lt;/strong&gt; donde hemos realizado el registro del objeto del punto anterior, con el decorador [&lt;span style="color: #2b91af"&gt;ScriptableMember&lt;/span&gt;] el cual será el método al que podremos llamar desde javascript. &lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;ScriptableMember&lt;/span&gt;]
&lt;span style="color: blue"&gt;public void &lt;/span&gt;slMethod(&lt;span style="color: blue"&gt;string &lt;/span&gt;o)
{
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(o != &lt;span style="color: #a31515"&gt;"H"&lt;/span&gt;)
        LayoutRoot.Orientation = &lt;span style="color: #2b91af"&gt;Orientation&lt;/span&gt;.Vertical;
    &lt;span style="color: blue"&gt;else
        &lt;/span&gt;LayoutRoot.Orientation = &lt;span style="color: #2b91af"&gt;Orientation&lt;/span&gt;.Horizontal;
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Ahora nos vamos a la página ASPX desde la cual llamaremos al método &lt;strong&gt;slMethod &lt;/strong&gt;del Silverlight. Para esto en primer lugar obtendremos el contenedor del Silverlight el cual en nuestro caso del ejemplo se llama &lt;strong&gt;SilverlightContainer &lt;/strong&gt;y por último accederemos al método registrado mediante la siguiente sintaxis:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;Orientacion(oo)
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;slPlugin = $get(&lt;span style="color: #a31515"&gt;"SilverlightContainer"&lt;/span&gt;);
     
    slPlugin.Content.slObject.slMethod(oo);
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;PD: Se han creado dos botones &lt;em&gt;Vertical&lt;/em&gt; y &lt;em&gt;Horizontal&lt;/em&gt; que llamarán a la función &lt;strong&gt;Orientacion&lt;/strong&gt; para cambiar el tipo de orientación del StackPanel.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="302" alt="Stackpanel" src="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel_thumb.jpg" width="430" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="461" alt="Stackpanel2" src="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel2_thumb.jpg" width="430" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/12803.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>En el último post de la serie esta que comencé de "Las Cosas Claras" estuvimos viendo como podíamos acceder al DOM del explorador para, en el ejemplo, llamar a funciones javascript. Pues bien, hoy veremos como hacer precisamente lo contrario.</p> <p>En el siguiente ejemplo veremos como desde javascript podemos provocar cambios en el Silverlight, en este caso cambiar la orientación de los elementos de un <strong>StackPanel</strong>, pero también podríamos provocar el inicio de una animación o pararla, etc.</p> <p>En primer lugar utilizaremos el siguiente namespace ya que contiene lo necesario para realizar esto:</p><pre class="code"><span style="color: blue">using </span>System.Windows.Browser;</pre>
<p> </p>
<p>Centrándonos en la página principal del Silverlight <em>Page.xaml</em>. El código XAML será muy sencillo, un simple StackPanel con varios botones:</p><pre class="code"><span style="color: blue">    &lt;</span><span style="color: #a31515">StackPanel </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Name</span><span style="color: blue">="LayoutRoot" </span><span style="color: red">Background</span><span style="color: blue">="White"&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Rojo" </span><span style="color: red">Background</span><span style="color: blue">="Red"/&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Verde" </span><span style="color: red">Background</span><span style="color: blue">="Green"/&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Azul" </span><span style="color: red">Background</span><span style="color: blue">="Blue"/&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Amarillo" </span><span style="color: red">Background</span><span style="color: blue">="Yellow"/&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Blanco" </span><span style="color: red">Background</span><span style="color: blue">="White"/&gt;
        &lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">="Negro" </span><span style="color: red">Background</span><span style="color: blue">="Black"/&gt;
    &lt;/</span><span style="color: #a31515">StackPanel</span><span style="color: blue">&gt;</span></pre><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>
<p>Y en el código fuente debemos registrar la clase <strong>MiTipoScriptable</strong> para poderla usar desde javascript de la siguiente manera:</p>
<ul>
<li>En el evento Loaded de la página registraremos el objeto que será usados para acceder desde javascript al método. </li></ul>
<blockquote><pre class="code"><span style="color: #2b91af">HtmlPage</span>.RegisterScriptableObject(<span style="color: #a31515">"slObject"</span>, <span style="color: blue">this</span>);</pre></blockquote><a href="http://11011.net/software/vspaste"></a>
<ul>
<li>Y por último decoraremos un método de la clase <strong>Page,</strong> donde hemos realizado el registro del objeto del punto anterior, con el decorador [<span style="color: #2b91af">ScriptableMember</span>] el cual será el método al que podremos llamar desde javascript. </li></ul>
<blockquote><pre class="code">[<span style="color: #2b91af">ScriptableMember</span>]
<span style="color: blue">public void </span>slMethod(<span style="color: blue">string </span>o)
{
    <span style="color: blue">if </span>(o != <span style="color: #a31515">"H"</span>)
        LayoutRoot.Orientation = <span style="color: #2b91af">Orientation</span>.Vertical;
    <span style="color: blue">else
        </span>LayoutRoot.Orientation = <span style="color: #2b91af">Orientation</span>.Horizontal;
}</pre></blockquote>
<p>Ahora nos vamos a la página ASPX desde la cual llamaremos al método <strong>slMethod </strong>del Silverlight. Para esto en primer lugar obtendremos el contenedor del Silverlight el cual en nuestro caso del ejemplo se llama <strong>SilverlightContainer </strong>y por último accederemos al método registrado mediante la siguiente sintaxis:</p><pre class="code"><span style="color: blue">function </span>Orientacion(oo)
{
    <span style="color: blue">var </span>slPlugin = $get(<span style="color: #a31515">"SilverlightContainer"</span>);
     
    slPlugin.Content.slObject.slMethod(oo);
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>PD: Se han creado dos botones <em>Vertical</em> y <em>Horizontal</em> que llamarán a la función <strong>Orientacion</strong> para cambiar el tipo de orientación del StackPanel.</p>
<p><a href="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="302" alt="Stackpanel" src="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel_thumb.jpg" width="430" border="0" /></a> </p>
<p><a href="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="461" alt="Stackpanel2" src="http://images.fernandocortes.net/LasCosasClarasDesdeJavascriptinteractuar_EDFD/Stackpanel2_thumb.jpg" width="430" border="0" /></a></p><img src ="http://blogs.clearscreen.com/nandy/aggbug/12803.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Curso Windows Live APIs para desarrolladores Php y Jsp</title><link>http://blogs.clearscreen.com/nandy/archive/2008/07/02/12635.aspx</link><pubDate>Wed, 02 Jul 2008 03:16:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/07/02/12635.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/12635.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/07/02/12635.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/12635.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/12635.aspx</trackback:ping><description>&lt;p&gt;Pues hoy ya esta disponible el curso on-line que realicé sobre como enriquecer, mediante las &lt;a href="http://dev.live.com" target="_blank"&gt;APIs de Windows Live&lt;/a&gt; las páginas web creadas por los desarrolladores PHP y JSP.&lt;/p&gt; &lt;p&gt;El curso esta disponible para su descarga desde &lt;a href="http://go.microsoft.com/?linkid=9209662" target="_blank"&gt;Aqui&lt;/a&gt;, y se tratarán las siguientes APIS:&lt;/p&gt; &lt;li&gt;API Search  &lt;/li&gt;&lt;li&gt;Virtual Earth API  &lt;/li&gt;&lt;li&gt;Windows Live ID API  &lt;/li&gt;&lt;li&gt;Messenger Activities  &lt;/li&gt;&lt;li&gt;IM Control &amp;amp; Presence API&lt;/li&gt; &lt;p&gt;En el curso también se incluyen vídeo explicativos y sí, lo reconozco, como creo que le pasa a casi todos los mortales, no me gusta escuchar mi voz grabada :S&lt;/p&gt; &lt;p&gt;Habrá novedades sobre algún curso nuevo de más APIs de Windows Live que se publicará en un futuro.&lt;/p&gt; &lt;p&gt;Pues a enriquecer se ha dicho.&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/12635.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Pues hoy ya esta disponible el curso on-line que realicé sobre como enriquecer, mediante las <a href="http://dev.live.com" target="_blank">APIs de Windows Live</a> las páginas web creadas por los desarrolladores PHP y JSP.</p> <p>El curso esta disponible para su descarga desde <a href="http://go.microsoft.com/?linkid=9209662" target="_blank">Aqui</a>, y se tratarán las siguientes APIS:</p> <li>API Search  </li><li>Virtual Earth API  </li><li>Windows Live ID API  </li><li>Messenger Activities  </li><li>IM Control &amp; Presence API</li> <p>En el curso también se incluyen vídeo explicativos y sí, lo reconozco, como creo que le pasa a casi todos los mortales, no me gusta escuchar mi voz grabada :S</p> <p>Habrá novedades sobre algún curso nuevo de más APIs de Windows Live que se publicará en un futuro.</p> <p>Pues a enriquecer se ha dicho.</p><img src ="http://blogs.clearscreen.com/nandy/aggbug/12635.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fernando Cortés Hierro</dc:creator><title>Las Cosas Claras: Llamar funciones javascript desde Silverlight</title><link>http://blogs.clearscreen.com/nandy/archive/2008/06/27/12223.aspx</link><pubDate>Fri, 27 Jun 2008 03:28:00 GMT</pubDate><guid>http://blogs.clearscreen.com/nandy/archive/2008/06/27/12223.aspx</guid><wfw:comment>http://blogs.clearscreen.com/nandy/comments/12223.aspx</wfw:comment><comments>http://blogs.clearscreen.com/nandy/archive/2008/06/27/12223.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.clearscreen.com/nandy/comments/commentRss/12223.aspx</wfw:commentRss><trackback:ping>http://blogs.clearscreen.com/nandy/services/trackbacks/12223.aspx</trackback:ping><description>&lt;p&gt;Hoy veremos algo que nos puede resultar muy útil en nuestras aplicaciones Silverlight. Estamos hablando de la posibilidad de acceder al DOM (Document Object Model) del navegador para llamar a una función javascript que hará lo que queramos en el cliente.&lt;/p&gt; &lt;p&gt;Para ello necesitamos en primer lugar usar el siguiente Namespace:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Windows.Browser;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;En este namespace disponemos de la clase &lt;strong&gt;HtmlPage&lt;/strong&gt; que será la que nos permita tener el acceso necesario al DOM del navegador. &lt;/p&gt;
&lt;p&gt;Para este post he montado en un momentillo un ejemplo muy fácil. Son dos botones y una caja de texto. El primer botón llama a una función que muestra un alert con un mensaje predefinido en el cliente y el segundo botón muestra un alert con el texto del TextBox como mensaje. Algo sencillo pero que muestra lo más básico que podemos hacer: Llamar a una función con y sin parámetros.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Sltobrowser.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="Sltobrowser" src="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Sltobrowser_thumb.jpg" width="489" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En el código fuente podemos ver como utilizando el método &lt;strong&gt;GetProperty&lt;/strong&gt; al que se le pasa el nombre de la función javascript, obtenemos un objeto de tipo &lt;strong&gt;ScriptObject&lt;/strong&gt;. Este tipo de objeto dispone del método &lt;strong&gt;InvokeSelf&lt;/strong&gt; que se encarga de hacer la llamada a la función en cuestión. Este método recibirá los parámetros que le serán pasados a la función javascript.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;bttLaunch_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
{
    &lt;span style="color: #2b91af"&gt;ScriptObject &lt;/span&gt;scriptMethod = (&lt;span style="color: #2b91af"&gt;ScriptObject&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;HtmlPage&lt;/span&gt;.Window.GetProperty(&lt;span style="color: #a31515"&gt;"MostrarAlerta"&lt;/span&gt;);
    scriptMethod.InvokeSelf();
}

&lt;span style="color: blue"&gt;private void &lt;/span&gt;bttLaunch2_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
{
    &lt;span style="color: #2b91af"&gt;ScriptObject &lt;/span&gt;scriptMethod = (&lt;span style="color: #2b91af"&gt;ScriptObject&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;HtmlPage&lt;/span&gt;.Window.GetProperty(&lt;span style="color: #a31515"&gt;"MostrarAlerta2"&lt;/span&gt;);
    scriptMethod.InvokeSelf(txtMessage.Text);
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Un muestra del resultado por ejemplo al pulsar el segundo botón seria el siguiente:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Capture.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="389" alt="Capture" src="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Capture_thumb.jpg" width="528" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En el siguiente post de esta serie veremos como hacer lo contrario. Llamar desde el cliente, el navegador, a un función del Silverlight.&lt;/p&gt;&lt;img src ="http://blogs.clearscreen.com/nandy/aggbug/12223.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Hoy veremos algo que nos puede resultar muy útil en nuestras aplicaciones Silverlight. Estamos hablando de la posibilidad de acceder al DOM (Document Object Model) del navegador para llamar a una función javascript que hará lo que queramos en el cliente.</p> <p>Para ello necesitamos en primer lugar usar el siguiente Namespace:</p><pre class="code"><span style="color: blue">using </span>System.Windows.Browser;</pre><a href="http://11011.net/software/vspaste"></a>
<p>En este namespace disponemos de la clase <strong>HtmlPage</strong> que será la que nos permita tener el acceso necesario al DOM del navegador. </p>
<p>Para este post he montado en un momentillo un ejemplo muy fácil. Son dos botones y una caja de texto. El primer botón llama a una función que muestra un alert con un mensaje predefinido en el cliente y el segundo botón muestra un alert con el texto del TextBox como mensaje. Algo sencillo pero que muestra lo más básico que podemos hacer: Llamar a una función con y sin parámetros.</p>
<p><a href="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Sltobrowser.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="Sltobrowser" src="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Sltobrowser_thumb.jpg" width="489" border="0" /></a> </p>
<p>En el código fuente podemos ver como utilizando el método <strong>GetProperty</strong> al que se le pasa el nombre de la función javascript, obtenemos un objeto de tipo <strong>ScriptObject</strong>. Este tipo de objeto dispone del método <strong>InvokeSelf</strong> que se encarga de hacer la llamada a la función en cuestión. Este método recibirá los parámetros que le serán pasados a la función javascript.</p><pre class="code"><span style="color: blue">private void </span>bttLaunch_Click(<span style="color: blue">object </span>sender, <span style="color: #2b91af">RoutedEventArgs </span>e)
{
    <span style="color: #2b91af">ScriptObject </span>scriptMethod = (<span style="color: #2b91af">ScriptObject</span>)<span style="color: #2b91af">HtmlPage</span>.Window.GetProperty(<span style="color: #a31515">"MostrarAlerta"</span>);
    scriptMethod.InvokeSelf();
}

<span style="color: blue">private void </span>bttLaunch2_Click(<span style="color: blue">object </span>sender, <span style="color: #2b91af">RoutedEventArgs </span>e)
{
    <span style="color: #2b91af">ScriptObject </span>scriptMethod = (<span style="color: #2b91af">ScriptObject</span>)<span style="color: #2b91af">HtmlPage</span>.Window.GetProperty(<span style="color: #a31515">"MostrarAlerta2"</span>);
    scriptMethod.InvokeSelf(txtMessage.Text);
}</pre><a href="http://11011.net/software/vspaste"></a>
<p>Un muestra del resultado por ejemplo al pulsar el segundo botón seria el siguiente:</p>
<p><a href="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Capture.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="389" alt="Capture" src="http://images.fernandocortes.net/SilverlightBeta2Llamarfuncionesjavascrip_FBA4/Capture_thumb.jpg" width="528" border="0" /></a> </p>
<p>En el siguiente post de esta serie veremos como hacer lo contrario. Llamar desde el cliente, el navegador, a un función del Silverlight.</p><img src ="http://blogs.clearscreen.com/nandy/aggbug/12223.aspx" width = "1" height = "1" /></body></item></channel></rss>