İzlenecek yol: WPF'de Windows Forms Bileşik Denetimini Barındırma

Windows Presentation Foundation (WPF), uygulama oluşturmak için zengin bir ortam sağlar. Bununla birlikte, Windows Forms koduna önemli bir yatırım yaptığnız zaman, kodu sıfırdan yeniden yazmak yerine bu kodun en az birını WPF uygulamanıza yeniden kullanmak daha etkili olabilir. En yaygın senaryo, mevcut Formlar denetimleriniz Windows senaryodur. Bazı durumlarda, bu denetimler için kaynak koduna erişiminiz bile olmaz. WPF, bu tür denetimleri bir WPF uygulamasında barındırmak için basit bir yordam sağlar. Örneğin, özelleştirilmiş denetimlerinizi barındırırken programlamanın çoğu için WPF DataGridView kullanabilirsiniz.

Bu kılavuzda, WPF uygulamasında veri girişi gerçekleştirmek için Windows Forms bileşik denetimi barındıran bir uygulamada size yol gösterilir. Bileşik denetim bir DLL içinde paketlenmiştir. Bu genel yordam daha karmaşık uygulamalara ve denetimlere genişletilmiş olabilir. Bu izlenecek yol, Görünüm ve işlevsellikte neredeyse aynı olacak şekilde tasarlanmıştır. Walkthrough: Hosting a WPF Composite Control in Windows Forms. Temel fark, barındırma senaryosunun tersine çevrilme durumudur.

Kılavuz iki bölüme ayrılmıştır. İlk bölümde, Formlar bileşik denetimi için Windows kısaca açık bir şekilde açıktır. İkinci bölümde bileşik denetimi bir WPF uygulamasında barındırma, denetimden olayları alma ve denetimin bazı özelliklerine erişme konuları ayrıntılı olarak açıklanmaktadır.

Bu kılavuzda gösterilen görevler şunlardır:

  • Windows Forms bileşik denetimi uygulama.

  • WPF konak uygulamasını uygulama.

Bu kılavuzda gösterilen görevlerin tam kod listesi için bkz. WPF Örneğinde Windows Forms Bileşik Denetimi Barındırma.

Önkoşullar

Bu Visual Studio tamamlamanız gerekir.

Windows Forms Bileşik Denetimi Uygulama

Bu Windows kullanılan Formlar bileşik denetimi basit bir veri girişi formu şeklindedir. Bu form, kullanıcının adını ve adresini alır ve ardından bu bilgileri ana bilgisayarla geri almak için özel bir olay kullanır. Aşağıdaki çizimde işlenmiş denetim gösterilmiştir.

Aşağıdaki görüntüde, Windows Forms bileşik denetimi yer a gösterir:

Screenshot that shows a simple Windows Forms control.

Projeyi Oluşturma

Projeyi başlatmak için:

  1. Yeni Visual Studio'ı açın ve Yeni Project kutusunu açın.

  2. Pencere kategorisinde form formlarını Windows Kitaplığı şablonunu seçin.

  3. Yeni projeyi olarak ad MyControls girin.

  4. Konum için, gibi rahatça adlandırılmış bir üst düzey klasör WpfHostingWindowsFormsControl belirtin. Daha sonra konak uygulamasını bu klasöre koyacağız.

  5. Projeyi oluşturmak için Tamam'a tıklayın. Varsayılan proje adlı tek bir denetim UserControl1 içerir.

  6. Bu Çözüm Gezgini olarak yeniden UserControl1MyControl1 adlandıryın.

Projenizin aşağıdaki sistem URL'lerine başvuruları olması gerekir. Bu URL'lerden herhangi biri varsayılan olarak dahil değil, bunları projeye ekleyin.

  • Sistem

  • System.Data

  • System.Drawing

  • Sistem. Windows. Forms

  • System.Xml

Forma Denetim Ekleme

Forma denetim eklemek için:

  • Tasarımcıda MyControl1 açın.

LabelForma, önceki çizimde olduğu gibi boyutlandırıldık ve düzenlenmiş beş denetim ve TextBox bunların karşılık gelen denetimlerini ekleyin. Örnekte denetimler TextBox şu şekilde adlandırılmıştır:

  • txtName

  • txtAddress

  • txtCity

  • txtState

  • txtZip

Tamam ve Button İptal etiketli Button denetim ekleyin. Örnekte düğme adları sırasıyla btnOK ve btnCancel olur.

Destekleyen Kodu Uygulama

Formu kod görünümünde açın. Denetim, özel olayı yükselterek toplanan verileri ana bilgisayarlarına OnButtonClick döndürür. Veriler olay bağımsız değişkeni nesnesinde yer alan. Aşağıdaki kod, olay ve temsilci bildirimini gösterir.

Aşağıdaki kodu MyControl1 sınıfına ekleyin.

public delegate void MyControlEventHandler(object sender, MyControlEventArgs args);
public event MyControlEventHandler OnButtonClick;
Public Delegate Sub MyControlEventHandler(ByVal sender As Object, ByVal args As MyControlEventArgs)
Public Event OnButtonClick As MyControlEventHandler

MyControlEventArgssınıfı, ana bilgisayar için döndürülen bilgileri içerir.

Forma aşağıdaki sınıfı ekleyin.

public class MyControlEventArgs : EventArgs
{
    private string _Name;
    private string _StreetAddress;
    private string _City;
    private string _State;
    private string _Zip;
    private bool _IsOK;

    public MyControlEventArgs(bool result,
                                   string name,
                                   string address,
                                   string city,
                                   string state,
                                   string zip)
    {
        _IsOK = result;
        _Name = name;
        _StreetAddress = address;
        _City = city;
        _State = state;
        _Zip = zip;
    }

    public string MyName
    {
        get { return _Name; }
        set { _Name = value; }
    }
    public string MyStreetAddress
    {
        get { return _StreetAddress; }
        set { _StreetAddress = value; }
    }
    public string MyCity
    {
        get { return _City; }
        set { _City = value; }
    }
    public string MyState
    {
        get { return _State; }
        set { _State = value; }
    }
    public string MyZip
    {
        get { return _Zip; }
        set { _Zip = value; }
    }
    public bool IsOK
    {
        get { return _IsOK; }
        set { _IsOK = value; }
    }
}
Public Class MyControlEventArgs
    Inherits EventArgs
    Private _Name As String
    Private _StreetAddress As String
    Private _City As String
    Private _State As String
    Private _Zip As String
    Private _IsOK As Boolean
    
    
    Public Sub New(ByVal result As Boolean, ByVal name As String, ByVal address As String, ByVal city As String, ByVal state As String, ByVal zip As String) 
        _IsOK = result
        _Name = name
        _StreetAddress = address
        _City = city
        _State = state
        _Zip = zip
    
    End Sub
    
    
    Public Property MyName() As String 
        Get
            Return _Name
        End Get
        Set
            _Name = value
        End Set
    End Property
    
    Public Property MyStreetAddress() As String 
        Get
            Return _StreetAddress
        End Get
        Set
            _StreetAddress = value
        End Set
    End Property
    
    Public Property MyCity() As String 
        Get
            Return _City
        End Get
        Set
            _City = value
        End Set
    End Property
    
    Public Property MyState() As String 
        Get
            Return _State
        End Get
        Set
            _State = value
        End Set
    End Property
    
    Public Property MyZip() As String 
        Get
            Return _Zip
        End Get
        Set
            _Zip = value
        End Set
    End Property
    
    Public Property IsOK() As Boolean 
        Get
            Return _IsOK
        End Get
        Set
            _IsOK = value
        End Set
    End Property
End Class

Kullanıcı Tamam veya İptal düğmesinetıkladığında, olay işleyicileri verileri içeren bir nesne oluşturur ve olayı OnButtonClick oluşturur. İki işleyici arasındaki tek fark, olay bağımsız değişkeninin IsOK özelliğidir. Bu özellik, ana bilgisayar hangi düğmeye tıklandı olduğunu belirlemeye olanak sağlar. Tamam düğmesi true ve İptal truefalse için false olarak ayarlanır. Aşağıdaki kod, iki düğme işleyicisini gösterir.

Aşağıdaki kodu MyControl1 sınıfına ekleyin.

private void btnOK_Click(object sender, System.EventArgs e)
{

    MyControlEventArgs retvals = new MyControlEventArgs(true,
                                                         txtName.Text,
                                                         txtAddress.Text,
                                                         txtCity.Text,
                                                         txtState.Text,
                                                         txtZip.Text);
    OnButtonClick(this, retvals);
}

private void btnCancel_Click(object sender, System.EventArgs e)
{
    MyControlEventArgs retvals = new MyControlEventArgs(false,
                                                         txtName.Text,
                                                         txtAddress.Text,
                                                         txtCity.Text,
                                                         txtState.Text,
                                                         txtZip.Text);
    OnButtonClick(this, retvals);
}
Private Sub btnOK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOK.Click

    Dim retvals As New MyControlEventArgs(True, txtName.Text, txtAddress.Text, txtCity.Text, txtState.Text, txtZip.Text)
    RaiseEvent OnButtonClick(Me, retvals)

End Sub

Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
    Dim retvals As New MyControlEventArgs(False, txtName.Text, txtAddress.Text, txtCity.Text, txtState.Text, txtZip.Text)
    RaiseEvent OnButtonClick(Me, retvals)

End Sub

Derlemeye Güçlü Bir Ad Verme ve Derlemeyi Derleme

Bu derlemeye bir WPF uygulaması tarafından başvurul için, derlemenin güçlü bir adı olması gerekir. Güçlü bir ad oluşturmak için, Sn.exe bir anahtar dosyası oluşturun ve bunu projenize ekleyin.

  1. Bir Visual Studio istemi açın. Bunu yapmak için Başlat menüsüne tıklayın ve ardından Tüm Programlar/2010/Microsoft Visual Studio 2010/Visual Studio Araçları/Visual Studio Komut İstemi'ne tıklayın. Bu, özelleştirilmiş ortam değişkenleriyle bir konsol penceresi açar.

  2. Komut isteminde komutunu cd kullanarak proje klasörünüze gidin.

  3. Aşağıdaki komutu çalıştırarak MyControls.snk adlı bir anahtar dosyası oluşturma.

    Sn.exe -k MyControls.snk
    
  4. Anahtar dosyasını projenize eklemek için, projenizin içinde proje adına sağ tıklayın Çözüm Gezgini özellikler'e tıklayın. Project Tasarımcısı'nda İmzalama sekmesine tıklayın, Derlemeyi imzala onay kutusunu seçin ve anahtar dosyanıza göz atabilirsiniz.

  5. Çözümü derleyin. Derleme, MyControls.dll adlı bir DLL oluşturur.

WPF Konak Uygulamasını Uygulama

WPF konak uygulaması barındırmak WindowsFormsHost için denetimi MyControl1 kullanır. Uygulama, OnButtonClick denetimden verileri almak için olayı işler. Ayrıca denetimin bazı özelliklerini WPF uygulamasından değiştirmenizi sağlayan bir seçenek düğmeleri koleksiyonuna sahiptir. Aşağıdaki çizimde, bitmiş uygulama gösterilmiştir.

Aşağıdaki görüntüde WPF uygulamasına eklenmiş denetim dahil olmak üzere uygulamanın tamamlanmıştır:

Screenshot that shows a control embedded in a WPF page.

Projeyi Oluşturma

Projeyi başlatmak için:

  1. Yeni Visual Studio'yi açın ve Yeni Project.

  2. Pencere kategorisinde WPF Uygulaması şablonunu seçin.

  3. Yeni projeyi olarak ad WpfHost girin.

  4. Konum için, MyControls projesini içeren üst düzey klasörü belirtin.

  5. Projeyi oluşturmak için Tamam'a tıklayın.

Ayrıca, ve diğer derlemeleri içeren DLL'ye MyControl1 başvurular eklemeniz gerekir.

  1. Dosyada proje adına sağ tıklayın ve Çözüm Gezgini Ekle'yi seçin.

  2. Gözat sekmesine tıklayın ve MyControls.dll. Bu izlenecek yol için bu klasör MyControls\bin\Debug klasörüdür.

  3. Tamam'MyControls.dll ve ardından Tamam'a tıklayın.

  4. WindowsFormsIntegration derlemesi için WindowsFormsIntegration.dll.

Temel Düzeni Uygulama

Konak uygulamanın kullanıcı arabirimi (UI), MainWindow.xaml içinde uygulanır. Bu dosya düzeni tanımlayan Extensible Application Markup Language (XAML) işaretlemesi içerir ve Windows Forms Windows barındırır. Uygulama üç bölgeye ayrılır:

  • Barındırılan denetimin çeşitli özelliklerini değiştirmek için kullanabileceğiniz seçenek düğmelerinin koleksiyonunu içeren denetim özellikleri paneli.

  • Barındırılan denetimden döndürülen verileri görüntüleyen çeşitli öğeleri içeren denetim masası 'ndaki veriler.

  • Barındırılan denetimin kendisi.

Temel düzen aşağıdaki XAML 'de gösterilmiştir. Barındırmak için gereken biçimlendirme MyControl1 Bu örnekte atlanır, ancak daha sonra ele alınacaktır.

MainWindow. xaml içindeki XAML 'yi aşağıdakiler ile değiştirin. Visual Basic kullanıyorsanız, sınıfını olarak değiştirin x:Class="MainWindow" .

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      x:Class="WpfHost.MainWindow"
      xmlns:mcl="clr-namespace:MyControls;assembly=MyControls"
      Loaded="Init">
  <DockPanel>
    <DockPanel.Resources>
      <Style x:Key="inlineText" TargetType="{x:Type Inline}">
        <Setter Property="FontWeight" Value="Normal"/>
      </Style>
      <Style x:Key="titleText" TargetType="{x:Type TextBlock}">
        <Setter Property="DockPanel.Dock" Value="Top"/>
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Margin" Value="10,5,10,0"/>
      </Style>
    </DockPanel.Resources>

    <StackPanel Orientation="Vertical"
                DockPanel.Dock="Left"
                Background="Bisque"
                Width="250">

      <TextBlock  Margin="10,10,10,10"
                  FontWeight="Bold"
                  FontSize="12">Control Properties</TextBlock>
      <TextBlock Style="{StaticResource titleText}">Background Color</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnOriginalBackColor"
                    IsChecked="True"
                    Click="BackColorChanged">Original</RadioButton>
        <RadioButton Name="rdbtnBackGreen"
                    Click="BackColorChanged">LightGreen</RadioButton>
        <RadioButton Name="rdbtnBackSalmon"
                    Click="BackColorChanged">LightSalmon</RadioButton>
      </StackPanel>

      <TextBlock Style="{StaticResource titleText}">Foreground Color</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnOriginalForeColor"
                    IsChecked="True"
                    Click="ForeColorChanged">Original</RadioButton>
        <RadioButton Name="rdbtnForeRed"
                    Click="ForeColorChanged">Red</RadioButton>
        <RadioButton Name="rdbtnForeYellow"
                    Click="ForeColorChanged">Yellow</RadioButton>
      </StackPanel>

      <TextBlock Style="{StaticResource titleText}">Font Family</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnOriginalFamily"
                     IsChecked="True"
                    Click="FontChanged">Original</RadioButton>
        <RadioButton Name="rdbtnTimes"
                    Click="FontChanged">Times New Roman</RadioButton>
        <RadioButton Name="rdbtnWingdings"
                    Click="FontChanged">Wingdings</RadioButton>
      </StackPanel>

      <TextBlock Style="{StaticResource titleText}">Font Size</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnOriginalSize"
                    IsChecked="True"
                    Click="FontSizeChanged">Original</RadioButton>
        <RadioButton Name="rdbtnTen"
                    Click="FontSizeChanged">10</RadioButton>
        <RadioButton Name="rdbtnTwelve"
                    Click="FontSizeChanged">12</RadioButton>
      </StackPanel>

      <TextBlock Style="{StaticResource titleText}">Font Style</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnNormalStyle"
                     IsChecked="True"
                     Click="StyleChanged">Original</RadioButton>
        <RadioButton Name="rdbtnItalic"
                     Click="StyleChanged">Italic</RadioButton>
      </StackPanel>

      <TextBlock Style="{StaticResource titleText}">Font Weight</TextBlock>
      <StackPanel Margin="10,10,10,10">
        <RadioButton Name="rdbtnOriginalWeight"
                     IsChecked="True"
                   Click="WeightChanged">
          Original
        </RadioButton>
        <RadioButton Name="rdbtnBold"
                   Click="WeightChanged">Bold</RadioButton>
      </StackPanel>
    </StackPanel>

    <WindowsFormsHost Name="wfh"
                     DockPanel.Dock="Top"
                     Height="300">
      <mcl:MyControl1 Name="mc"/>
    </WindowsFormsHost>
    
    <StackPanel Orientation="Vertical"
                Height="Auto"
                Background="LightBlue">
      <TextBlock Margin="10,10,10,10"
            FontWeight="Bold"
            FontSize="12">Data From Control</TextBlock>
      <TextBlock Style="{StaticResource titleText}">
        Name: <Span Name="txtName" Style="{StaticResource inlineText}"/>
      </TextBlock>
      <TextBlock Style="{StaticResource titleText}">
        Street Address: <Span Name="txtAddress" Style="{StaticResource inlineText}"/>
      </TextBlock>
      <TextBlock Style="{StaticResource titleText}">
        City: <Span Name="txtCity" Style="{StaticResource inlineText}"/>
      </TextBlock>
      <TextBlock Style="{StaticResource titleText}">
        State: <Span Name="txtState" Style="{StaticResource inlineText}"/>
      </TextBlock>
      <TextBlock Style="{StaticResource titleText}">
        Zip: <Span Name="txtZip" Style="{StaticResource inlineText}"/>
      </TextBlock>
    </StackPanel>
  </DockPanel>
</Window>

İlk StackPanel öğe, RadioButton barındırılan denetimin çeşitli varsayılan özelliklerini değiştirmenize olanak tanıyan birkaç denetim kümesini içerir. Bu, ardından barındıran bir WindowsFormsHost öğesi MyControl1 . Son StackPanel öğesi, TextBlock barındırılan denetim tarafından döndürülen verileri görüntüleyen çeşitli öğeler içerir. Öğelerin ve Dock ve Height öznitelik ayarlarının sıralaması barındırılan denetimi, boşluk veya deformasyon olmadan pencereye katıştırır.

Denetimi barındırma

Önceki XAML 'nin aşağıdaki düzenlenmiş sürümü barındırmak için gereken öğelere odaklanır MyControl1 .

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      x:Class="WpfHost.MainWindow"
      xmlns:mcl="clr-namespace:MyControls;assembly=MyControls"
      Loaded="Init">
<WindowsFormsHost Name="wfh"
                 DockPanel.Dock="Top"
                 Height="300">
  <mcl:MyControl1 Name="mc"/>
</WindowsFormsHost>

xmlnsAd alanı eşleme özniteliği MyControls barındırılan denetimi içeren ad alanına bir başvuru oluşturur. Bu eşleme, MyControl1 xaml 'de olarak temsil etmenizi sağlar <mcl:MyControl1> .

XAML 'deki iki öğe barındırmayı işleme:

  • WindowsFormsHostWindowsFormsHostWPF uygulamasında bir Windows Forms denetimi barındırmanızı sağlayan öğeyi temsil eder.

  • mcl:MyControl1öğesini temsil eden MyControl1WindowsFormsHost öğesi öğenin alt koleksiyonuna eklenir. sonuç olarak, bu Windows Forms denetimi WPF penceresinin bir parçası olarak işlenir ve uygulamadan denetimle iletişim kurabilirsiniz.

Code-Behind dosyasını uygulama

MainWindow. xaml. vb veya MainWindow. xaml. cs arka plan kod dosyası, önceki bölümde ele alınan kullanıcı arabiriminin işlevlerini uygulayan yordamsal kodu içerir. Birincil görevler şunlardır:

  • Olayına bir olay işleyicisi iliştirme MyControl1OnButtonClick .

  • MyControl1Seçenek düğmelerinin toplanması temelinde ' nin çeşitli özelliklerini değiştirme.

  • Denetim tarafından toplanan verileri görüntüleme.

Uygulamayı başlatma

Başlatma kodu, pencerenin olayı için bir olay işleyicisinde bulunur Loaded ve denetimin olayına bir olay işleyicisi ekler OnButtonClick .

MainWindow. xaml. vb veya MainWindow. xaml. cs ' de, aşağıdaki kodu MainWindow sınıfına ekleyin.

private Application app;
private Window myWindow;
FontWeight initFontWeight;
Double initFontSize;
FontStyle initFontStyle;
SolidColorBrush initBackBrush;
SolidColorBrush initForeBrush;
FontFamily initFontFamily;
bool UIIsReady = false;

private void Init(object sender, EventArgs e)
{
    app = System.Windows.Application.Current;
    myWindow = (Window)app.MainWindow;
    myWindow.SizeToContent = SizeToContent.WidthAndHeight;
    wfh.TabIndex = 10;
    initFontSize = wfh.FontSize;
    initFontWeight = wfh.FontWeight;
    initFontFamily = wfh.FontFamily;
    initFontStyle = wfh.FontStyle;
    initBackBrush = (SolidColorBrush)wfh.Background;
    initForeBrush = (SolidColorBrush)wfh.Foreground;
    (wfh.Child as MyControl1).OnButtonClick += new MyControl1.MyControlEventHandler(Pane1_OnButtonClick);
    UIIsReady = true;
}
Private app As Application
Private myWindow As Window
Private initFontWeight As FontWeight
Private initFontSize As [Double]
Private initFontStyle As FontStyle
Private initBackBrush As SolidColorBrush
Private initForeBrush As SolidColorBrush
Private initFontFamily As FontFamily
Private UIIsReady As Boolean = False


Private Sub Init(ByVal sender As Object, ByVal e As RoutedEventArgs)
    app = System.Windows.Application.Current
    myWindow = CType(app.MainWindow, Window)
    myWindow.SizeToContent = SizeToContent.WidthAndHeight
    wfh.TabIndex = 10
    initFontSize = wfh.FontSize
    initFontWeight = wfh.FontWeight
    initFontFamily = wfh.FontFamily
    initFontStyle = wfh.FontStyle
    initBackBrush = CType(wfh.Background, SolidColorBrush)
    initForeBrush = CType(wfh.Foreground, SolidColorBrush)

    Dim mc As MyControl1 = wfh.Child

    AddHandler mc.OnButtonClick, AddressOf Pane1_OnButtonClick
    UIIsReady = True

End Sub

Daha önce MyControl1WindowsFormsHost öğenin alt öğe koleksiyonuna EKLENMIŞ olan xaml, WindowsFormsHostChild başvurusunu almak için öğesini çevirebilirsiniz MyControl1 . Daha sonra bu başvuruyu, ' a bir olay işleyicisi iliştirmek için kullanabilirsiniz OnButtonClick .

Denetimin kendine başvuru sağlamaya ek olarak, WindowsFormsHost uygulamanın içinden işleyebileceğiniz bir dizi denetimin özelliklerini gösterir. Başlatma kodu, bu değerleri uygulamada daha sonra kullanılmak üzere özel genel değişkenlere atar.

DLL 'deki türlere kolayca erişebilmeniz MyControlsImportsusing için, dosyanın en üstüne aşağıdaki veya ifadesini ekleyin.

Imports MyControls
using MyControls;

OnButtonClick olayını işleme

MyControl1 Kullanıcı, OnButtonClick Denetim düğmelerinden birini tıkladığında olayı başlatır.

Aşağıdaki kodu MainWindow sınıfına ekleyin.

//Handle button clicks on the Windows Form control
private void Pane1_OnButtonClick(object sender, MyControlEventArgs args)
{
    txtName.Inlines.Clear();
    txtAddress.Inlines.Clear();
    txtCity.Inlines.Clear();
    txtState.Inlines.Clear();
    txtZip.Inlines.Clear();

    if (args.IsOK)
    {
        txtName.Inlines.Add( " " + args.MyName );
        txtAddress.Inlines.Add( " " + args.MyStreetAddress );
        txtCity.Inlines.Add( " " + args.MyCity );
        txtState.Inlines.Add( " " + args.MyState );
        txtZip.Inlines.Add( " " + args.MyZip );
    }
}
'Handle button clicks on the Windows Form control
Private Sub Pane1_OnButtonClick(ByVal sender As Object, ByVal args As MyControlEventArgs)
    txtName.Inlines.Clear()
    txtAddress.Inlines.Clear()
    txtCity.Inlines.Clear()
    txtState.Inlines.Clear()
    txtZip.Inlines.Clear()

    If args.IsOK Then
        txtName.Inlines.Add(" " + args.MyName)
        txtAddress.Inlines.Add(" " + args.MyStreetAddress)
        txtCity.Inlines.Add(" " + args.MyCity)
        txtState.Inlines.Add(" " + args.MyState)
        txtZip.Inlines.Add(" " + args.MyZip)
    End If

End Sub

Metin kutularındaki veriler MyControlEventArgs nesnesine paketlenmiştir. Kullanıcı Tamam düğmesine tıkladığında, olay işleyicisi verileri ayıklar ve aşağıdaki panelde görüntüler .

Denetimin özelliklerini değiştirme

WindowsFormsHostÖğesi, barındırılan denetimin varsayılan özelliklerinden birkaçını gösterir. Sonuç olarak, denetimin görünümünü uygulamanızın stiliyle daha yakından eşleşecek şekilde değiştirebilirsiniz. Sol paneldeki seçenek düğmelerinin kümeleri, kullanıcının çeşitli renk ve yazı tipi özelliklerini değiştirmesini sağlar. Her düğme kümesi, Click olay için kullanıcının seçenek düğmesi seçimlerini algılayan ve denetimdeki ilgili özelliği değiştiren bir işleyicisine sahiptir.

Aşağıdaki kodu MainWindow sınıfına ekleyin.

private void BackColorChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnBackGreen)
        wfh.Background = new SolidColorBrush(Colors.LightGreen);
    else if (sender == rdbtnBackSalmon)
        wfh.Background = new SolidColorBrush(Colors.LightSalmon);
    else if (UIIsReady == true)
        wfh.Background = initBackBrush;
}

private void ForeColorChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnForeRed)
        wfh.Foreground = new SolidColorBrush(Colors.Red);
    else if (sender == rdbtnForeYellow)
        wfh.Foreground = new SolidColorBrush(Colors.Yellow);
    else if (UIIsReady == true)
        wfh.Foreground = initForeBrush;
}

private void FontChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnTimes)
        wfh.FontFamily = new FontFamily("Times New Roman");
    else if (sender == rdbtnWingdings)
        wfh.FontFamily = new FontFamily("Wingdings");
    else if (UIIsReady == true)
        wfh.FontFamily = initFontFamily;
}
private void FontSizeChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnTen)
        wfh.FontSize = 10;
    else if (sender == rdbtnTwelve)
        wfh.FontSize = 12;
    else if (UIIsReady == true)
        wfh.FontSize = initFontSize;
}
private void StyleChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnItalic)
        wfh.FontStyle = FontStyles.Italic;
    else if (UIIsReady == true)
        wfh.FontStyle = initFontStyle;
}
private void WeightChanged(object sender, RoutedEventArgs e)
{
    if (sender == rdbtnBold)
        wfh.FontWeight = FontWeights.Bold;
    else if (UIIsReady == true)
        wfh.FontWeight = initFontWeight;
}
Private Sub BackColorChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)

    If sender.Equals(rdbtnBackGreen) Then
        wfh.Background = New SolidColorBrush(Colors.LightGreen)
    ElseIf sender.Equals(rdbtnBackSalmon) Then
        wfh.Background = New SolidColorBrush(Colors.LightSalmon)
    ElseIf UIIsReady = True Then
        wfh.Background = initBackBrush
    End If

End Sub

Private Sub ForeColorChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If sender.Equals(rdbtnForeRed) Then
        wfh.Foreground = New SolidColorBrush(Colors.Red)
    ElseIf sender.Equals(rdbtnForeYellow) Then
        wfh.Foreground = New SolidColorBrush(Colors.Yellow)
    ElseIf UIIsReady = True Then
        wfh.Foreground = initForeBrush
    End If

End Sub

Private Sub FontChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If sender.Equals(rdbtnTimes) Then
        wfh.FontFamily = New FontFamily("Times New Roman")
    ElseIf sender.Equals(rdbtnWingdings) Then
        wfh.FontFamily = New FontFamily("Wingdings")
    ElseIf UIIsReady = True Then
        wfh.FontFamily = initFontFamily
    End If

End Sub

Private Sub FontSizeChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If sender.Equals(rdbtnTen) Then
        wfh.FontSize = 10
    ElseIf sender.Equals(rdbtnTwelve) Then
        wfh.FontSize = 12
    ElseIf UIIsReady = True Then
        wfh.FontSize = initFontSize
    End If

End Sub

Private Sub StyleChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If sender.Equals(rdbtnItalic) Then
        wfh.FontStyle = FontStyles.Italic
    ElseIf UIIsReady = True Then
        wfh.FontStyle = initFontStyle
    End If

End Sub

Private Sub WeightChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If sender.Equals(rdbtnBold) Then
        wfh.FontWeight = FontWeights.Bold
    ElseIf UIIsReady = True Then
        wfh.FontWeight = initFontWeight
    End If

End Sub

Uygulamayı derleyin ve çalıştırın. Windows Forms bileşik denetimine bir metin ekleyin ve ardından tamam' a tıklayın. Metin, etiketlerde görüntülenir. Denetimdeki etkiyi görmek için farklı radyo düğmelerine tıklayın.

Ayrıca bkz.