Moving to Microsoft Visual Studio 2010
Hay que ir preparándose para Visual Studio 2010. Aquà tenéis un libro que os ayudara en la transición. Podéis descargarlo aquÃ
Espero que os guste.
Hay que ir preparándose para Visual Studio 2010. Aquà tenéis un libro que os ayudara en la transición. Podéis descargarlo aquÃ
Espero que os guste.
Libro de introducción al desarrollo de dispositivos móviles Windows escrito por Charles Petzold.
Podéis descargarlo aquÃ: PDF, XPS, Código de ejemplo
Si quieres meter las dll en el GAC para que sean compartidos por todas las aplicaciones de la maquina tienes que tener en cuenta un par de cosas:
No es un tema complicado, el único “problema†que encontramos fue cuando generamos una dll de serializarión con los tipos con el sgen, ya que esa dll tiene que estar firmada también, para eso tienes que firmar primero la dll sin las referencias a la dll de serializacion, después generar la dll de serializacion firmada y volver a poner las referencias, eso solo es necesaria hacerlo la primera vez, después cuando modifiquemos algún tipo y queramos actualizar la dll de serialización como están las dos firmadas no importa quitar referencias.
Para generar la dll de serializacion firmada el comando es este:
sgen.exe /assembly:”$(TargetDir)$(TargetFileName)” /compiler:”\”/keyfile:$(ProjectDir)Signature.snk”\” /force
Para meterlas en el GAC basta que las arrastres a la carpeta Windows/Assembly.
Aquà vemos como capturar el evento del botón derecho en silverlight.
Este evento desde la salida de silverlight ha estado inactivo, y dicen que en la siguiente versión, silverlight 4, estará disponible (también dijeron eso en la versión 3).
Cuando haces click derecho en la aplicación Silverlight te muestra un menú contextual y un dialogo de configuración.
¿Y si quieres usar el botón derecho en tu aplicación silverlight? El proceso es muy sencillo, y aquà os detallare unos pasos que deberéis de seguir para poder utilizar dicho evento y mostrar un menú contextual propio.
Paso 1: Tenemos que establecer el control de Silverlight para ventanas. En la pagina web del proyecto (suele ser default.aspx) que contiene el control Silverlight añadir la etiquetawindowless=”true”.
Paso 2: Introducimos el contextmenu donde queramos capturar el evento click derecho. Dentro del xaml creamos una nueva clase llamada ContextMenuInterceptor. En el constructor de esta clase capturamos un evento llamado “OnContextMenu” con HtmlPage.Document.AttachEvent (deberás agregar la referencia System.Window.Browser).
Dentro de este evento llamamos a e.PeventDefault(). Esto cancela la propagación del evento click derecho para que silverlight no lo reciba (asà no mostrará su menu contextual).
En este punto, es cuando usted esta capturando el evento y podra mostrar o hacer cualquier cosa. En el ejemplo que pongo a continuación utilizo yo un TextBlock para mostrar cuando capturamos el click derecho.
Page.xml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Browser; namespace SilverlightApplication15 { public partial class Page : UserControl { ContextMenuInterceptor _cmi = null; public Page() { InitializeComponent(); _cmi = new ContextMenuInterceptor(MyField); } } public class ContextMenuInterceptor { TextBlock TextField; public ContextMenuInterceptor(TextBlock textField) { TextField = textField; HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu); } private void OnContextMenu(object sender, HtmlEventArgs e) { TextField.Text = "Right Clicked Blocked at "+e.OffsetX+","+e.OffsetY; e.PreventDefault(); } } }
Microsoft.Practices.Unity nos permite mapear una Clase a un Interface a través de una configuración en el .config de la aplicación, de esta manera podemos cambiar el comportamiento o el escenario en el que esta se ejecuta la aplicación tocando solo esa configuración.
Aquà dejo un ejemplo básico:
1-Creamos el Interface
public interface IMessage { string Get(); }
2-Creamos las clases que implementan el interface
public class Message1 : IMessage { public string Get() { return "Desde Message 1"; } } public class Message2 : IMessage { public string Get() { return "Desde Message 2"; } }
3-Creamos la clase donde usaremos el Interface, en esta debemos definir un campo del tipo del interface marcado como [Dependency] y un método de load para cargar la clase que corresponde en el interface
public class Message { [Dependency] public IMessage IMessage { get; set; } public static Message Instance { get { using (IUnityContainer container = new UnityContainer()) { UnityConfigurationSection ConfigurationSection = (UnityConfigurationSection) ConfigurationManager.GetSection("DITest"); ConfigurationSection.Containers.Default.Configure(container); Message objMessage = container.Resolve<Message>(); return objMessage; } } } }
4-Creamos el archivo de configuración donde hacemos el mapeo
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="DITest" type="Microsoft.Practices.Unity.Configuration. UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <DITest> <containers> <container> <types> <type type="DITest.IMessage,DITest" mapTo="DITest.Message2,DITest"/> </types> </container> </containers> </DITest> </configuration>
5-Probamos el código desde la consola y vamos cambiando el “mapTo†del archivo de configuración para ir viendo el cambio
class Program { static void Main(string[] args) { Console.WriteLine(Message.Instance.IMessage.Get()); Console.ReadLine(); } }