Per tutti coloro i quali sono interessati all'utilizzo ed alla personalizzazione del tools VB6(2)XAML, pubblico un esempio di come possa essere possibile ridefinire il rendering dell'elemento VB.Label con una classe proprietaria. Dopo aver creato un progetto di tipo ClassLibrary, possiamo aggiungere la referenza a VB62XAML.exe nella quale si trova la classe VBControl, dalla quale dovremo ereditare. Implementando un override del metodo RenderToWPF possiamo definire come renderizzare il nostro controllo Label. Nell'esempio che ho riportato sotto, è possibile osservare una tecnica basata sulla creazione "manuale" degli elementi, ed un'altra basata sull'utilizzo di templates che magari possono essere caricati da disco. Imports System.XmlImports CodeSapiens.VB62XAMLPublic Class MyLabel Inherits CodeSapiens.VB62XAML.VBControl ''' <summary> ''' Override base function RenderToWPF and replace with new rendering attributes ''' </summary> ''' <param name="document">The XML document that parser passes to classes</param> ''' <returns>XMLElement representing the control in XML Format</returns> ''' <remarks></remarks> Public Overrides Function RenderToWPF(ByVal document As System.Xml.XmlDocument) As System.Xml.XmlElement 'Create element Dim _item As XmlElement = document.CreateElement("Label") 'Set base positioning attributes _item.SetAttribute("Name", Helpers.BuildName(Me.Name, Me.Properties)) _item.SetAttribute("Canvas.Left", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Left").Value))) _item.SetAttribute("Canvas.Top", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Top").Value))) _item.SetAttribute("Width", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Width").Value))) _item.SetAttribute("Height", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Height").Value))) _item.SetAttribute("Content", Me.Properties.GetProperty("Caption").Value) _item.SetAttribute("Padding", "0,0,0,0") 'Create a document fragment to show another manner of embedding XML in Control Rendering Dim _docFrag As XmlDocumentFragment = document.CreateDocumentFragment() Dim _gradientTemplate As String = String.Empty ' This string could be loaded from disk, and maybe values could be placeholders ' so we can substitute them at run-time using our special values... _gradientTemplate = "<Label.Background>" & _ " <LinearGradientBrush StartPoint=""0.5,0"" EndPoint=""0.5,1"">" & _ " <GradientStop Offset=""0.0"" Color=""LightBlue""/>" & _ " <GradientStop Offset=""1.0"" Color=""SlateBlue""/>" & _ " </LinearGradientBrush>" & _ "</Label.Background>" _docFrag.InnerXml = _gradientTemplate _item.AppendChild(_docFrag) 'Handle font generation If Me.Properties.ContainsProperty("Font") Then Me.RenderFont(Me.Properties.GetProperty("Font"), _item) End If Return _item End FunctionEnd Class...
Dopo averlo "coltivato" per le varie CTP di WINFX e .net Framework 3.0, ed aver cercato di realizzare qualcosa di veramente aperto e modificabile, ho deciso di rilasciare gratuitamente il convertitore VB6(2)XAML. Questo convertitore consente di convertire una Form di Visual Basic 6.0 in una Windows di Windows Presentation Foundation, utilizzando XAML come linguaggio di descrizione. Il progetto è MOLTO in beta, nel senso che non è completo e non è testato a fondo... Mi attendo da voi tutti suggerimenti ed idee su cosa implementare e su come farlo per massimizzare le potenzialità di questo strumento. Per il momento, il...