
O que fazer com um projecto Antigo??
Março 12, 2007Aqui vamos meu primeiro Post, e vou começar por uma questão que fiz a mim mesmo quando comecei a desenvolver em wpf num projecto “a sério”.
O que vou fazer com os módulos que já tenho, recomeçar tudo de novo??
A resposta a esta pergunta é simples… não… posso integrar XAML em Windows Forms e Windows Forms (Aqui quando me refiro a Windows Forms estou-me a referir controls/Usercontrols) em XAML.
Para isso basta usar o namespace System.Windows.Forms.Integration
Para integrar XAML em Windows Forms fazemos:
//Declarar/Construir o Host para colacar XAML dentro de uma Windows Form Framework 2.0
System.Windows.Forms.Integration.ElementHost HostdeXAML = new System.Windows.Forms.Integration.ElementHost();
//Declarar o UserControl de XAML
ClassXAML child = new ClassXAML();
HostdeXAML .Child=child;
HostdeXAML.Dock = DockStyle.Fill;
this.Controls.Add(HostdeXAML);
Para integrar Windows Forms em XAML fazemos:
System.Windows.Forms.Integration.WindowsFormsHost HostdeForms = new System.Windows.Forms.Integration.WindowsFormsHost();
ClassForms child = new ClassForms();
HostdeForms.Child=child;
HostdeForms.Margin=new System.Windows.Thickness(0);
HostdeForms.Child = child;
System.Windows.Controls.Grid.SetRow(HostdeForms, 0);
System.Windows.Controls.Grid.SetColumn(HostdeForms, 0);
myGrid.Children.Add(HostdeForms);
Gostava só de alertar para uns problemas com estas implementações, especialmente em relação aos airspaces. Dado que os objectos WindowsForms residem num airspace diferente do de WPF, não será possivel ter objectos WPF a voar por cima dos controlos windows forms (isto na implementação de wpf como host). Para obter esses efeitos recomendo fazer o drawing off-screen e usar o visualbrush pra colocar numa supreficie
Prometo escrever mais sobre este assunto no meu blog