Interoperacyjność
Z WPF do WinForms
WPF przychodzi z możliwością użycia kontrolek WPF w aplikacji WinForms. Możemy nasze WinFormsowe aplikacje pomału przebudowywać korzystając z dobrodziejstw WPF. Robimy to za pomocą kontrolki ElementHost. Przykład:
var expander = new Expander();
var panel = new StackPanel();
expander.Content = panel;
panel.Children.Add(new Button {Content = new TextBlock {Text = “Button1”}});
panel.Children.Add(new Button { Content = new TextBlock { Text = “Button2” } });
panel.Children.Add(new Button { Content = new TextBlock { Text = “Button3” } });
Tworzymy w nim kontrolkę Expander wraz ze StackPanelem, który zawiera kilka przycisków. Standardowe kontrolki WPF. Teraz zacznie się magia :). Wrzućmy sobie na formę WinForms ElementHost i przypiszmy naszą kontrolkę:
elementHost1.Child = expander;
A po uruchomieniu będzie to wyglądać następująco:
Oczywiście możemy podpinać się do event’ów kontrolek WPF’a i reagować na nie.
expander.Expanded += expander_Expanded;
void expander_Expanded(object sender, System.Windows.RoutedEventArgs e)
{
MessageBox.Show(“Expanded”);
}
Z WinForms do WPF
Jeśli mamy potrzebę użycia czegoś co dostępne jest w WPF, również możemy to uczynić. WindowsFormsHost na to nam pozwala. Używamy tegop w następujący sposób. Dodajemy referencję do dll’ki i rejestrujemy namespace w XAMLu.
xmlns:Forms=”clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms”
A następnie po prostu używamy:
<WindowsFormsHost Name=”windowsFormsHost1″ >
<Forms:MaskedTextBox Mask=”99-999″ />
WindowsFormsHost>
I po uruchomieniu możemy używać kontrolki MaskedTextBox w WPF.
Jeśli chcemy użyć akceleratorów to standardowo do ich deklarowania w WinForms używa się znaku &. Oczywiście w XAMLu nie możemy tego zrobić. Musimy posłużyć się & Jak w przykładzie poniżej:
<Forms:Button Text=”Use Alt+&A” Click=”Button_Click”/>
Kilka dodatków
Używając WPF w WinForm i vice versa musimy liczyć się z tym, że niektóre właściwości będą się różnic np. w WinForms mamy BackColor w WPF Backgroud. Musimy pamiętać o takich rozbieżnościach bawiąc się w łączenie WPF i WinForms.
W następnym odcinku będzie o user kontrolkach.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl