Aracılığıyla paylaş


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

Windows Presentation Foundation (WPF), uygulama oluşturmak için zengin bir ortam sağlar. Ancak, Windows Forms koduna önemli bir yatırım yaptığınızda, sıfırdan yeniden yazmak yerine WPF uygulamanızda bu kodun en az bir kısmını yeniden kullanmak daha etkili olabilir. En yaygın senaryo, mevcut Windows Forms denetimleriniz olmasıdır. Bazı durumlarda, bu denetimlerin kaynak koduna erişiminiz bile olmayabilir. WPF, bir WPF uygulamasında bu tür denetimleri barındırmak için basit bir yordam sağlar. Örneğin, özel DataGridView denetimlerinizi barındırırken programlamanızın çoğu için WPF kullanabilirsiniz.

Bu kılavuz, WPF uygulamasında veri girişi gerçekleştirmek için Windows Forms bileşik denetimini barındıran bir uygulamada size yol gösterir. Bileşik denetim bir DLL içinde paketlenmiş. Bu genel yordam daha karmaşık uygulamalara ve denetimlere uzatılabilir. Bu izlenecek yol, İzlenecek Yol: Windows Forms'de WPF Bileşik Denetimi Barındırma ile ilgili görünüm ve işlevsellikte neredeyse aynı olacak şekilde tasarlanmıştır. Birincil fark, barındırma senaryosunun tersine çevrilmiş olmasıdır.

İzlenecek yol iki bölüme ayrılır. İlk bölümde, Windows Forms bileşik denetiminin uygulanması kısaca açıklanmaktadır. İkinci bölümde, bileşik denetimin wpf uygulamasında nasıl barındırılacağı, denetimden olayları alma ve denetimin bazı özelliklerine erişme konuları ayrıntılı olarak ele alınmaktadır.

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

  • Windows Forms bileşik denetimini uygulama.

  • WPF ana uygulamasını hayata geçirme.

Bu kılavuzda gösterilen görevlerin tam kod listesi için WPF Örnek'deki Windows Forms Bileşik Denetimi Barındırma'ya bakın.

Önkoşullar

Bu kılavuzu tamamlamak için Visual Studio'ya ihtiyacınız vardır.

Windows Forms Bileşik Denetimini Uygulama

Bu örnekte kullanılan Windows Forms bileşik denetimi basit bir veri girişi formudur. Bu form kullanıcının adını ve adresini alır ve ardından bu bilgileri konağa döndürmek için özel bir olay kullanır. Aşağıdaki çizimde çizilmiş denetim gösterilmektedir.

Aşağıdaki görüntüde Bir Windows Forms bileşik denetimi gösterilmektedir:

Basit bir Windows Forms denetimini gösteren ekran görüntüsü.

Projeyi Oluşturma

Projeyi başlatmak için:

  1. Visual Studio'yu başlatın ve Yeni Proje iletişim kutusunu açın.

  2. Pencere kategorisinde Windows Forms Denetim Kitaplığı şablonunu seçin.

  3. Yeni projeyi MyControlsolarak adlandırın.

  4. Konum için, WpfHostingWindowsFormsControlgibi uygun adlandırılmış bir üst düzey klasör belirtin. Daha sonra konak uygulamasını bu klasöre yerleştireceksiniz.

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

  6. Çözüm Gezgini'nde UserControl1MyControl1olarak yeniden adlandırın.

Projenizde aşağıdaki sistem DLL'lerine başvurular bulunmalıdır. Bu DLL'lerden herhangi biri varsayılan olarak dahil değilse, bunları projeye ekleyin.

  • Sistem

  • System.Data

  • System.Drawing

  • System.Windows.Forms

  • System.Xml

Forma Denetim Ekleme

Forma denetim eklemek için:

  • MyControl1'ı tasarımcıda açın.

Form üzerinde, önceki gösterimde olduğu gibi boyutlandırılmış ve düzenlenmiş beş Label denetimi ve bunlara karşılık gelen TextBox denetimlerini ekleyin. Örnekte, TextBox denetimleri şu şekilde adlandırılır:

  • txtName

  • txtAddress

  • txtCity

  • txtState

  • txtZip

İki Button denetimi ekleyin: biri Tamam, diğeri İptal. Örnekte düğme adları sırasıyla btnOK ve btnCancel.

Destekleyici Kodu Uygulama

Formu kod görünümünde açın. Denetim, özel OnButtonClick etkinliğini tetikleyerek toplanan verileri ana bilgisayarına geri gönderir. Veriler olay bağımsız değişkeni nesnesinde yer alır. 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

MyControlEventArgs sınıfı, ana bilgisayara gönderilecek 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 Et düğmesine tıkladığında, Click olay işleyicileri verileri içeren bir MyControlEventArgs nesnesi oluşturur ve OnButtonClick olayını başlatır. İki işleyici arasındaki tek fark, olay bağımsız değişkeninin IsOK özelliğidir. Bu özellik, konağın hangi düğmeye tıklandığını belirlemesini sağlar. true düğmesi için ve false düğmesi için 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 Tanımlayıcı Ad Verme ve Derlemeyi Oluşturma

Bu derlemeye bir WPF uygulaması tarafından başvurulabilmesi için tanımlayıcı bir ada sahip olması gerekir. Tanımlayıcı ad oluşturmak için Sn.exe ile bir anahtar dosyası oluşturun ve bunu projenize ekleyin.

  1. Visual Studio komut istemi açın. Bunu yapmak için Başlangıç menüsüne tıklayın ve ardından Tüm Programlar/Microsoft Visual Studio 2010/Visual Studio Araçları/Visual Studio Komut İstemiseçin. Bu, özelleştirilmiş ortam değişkenleri içeren bir konsol penceresi başlatır.

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

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

    Sn.exe -k MyControls.snk
    
  4. Anahtar dosyasını projenize eklemek için Çözüm Gezgini'nde proje adına sağ tıklayın ve ardından Özellikleröğesine tıklayın. Proje Tasarımcısı'nda İmzalama sekmesine tıklayın, Bütünü imzala onay kutusunu seçin ve anahtar dosyanıza gözatın.

  5. Çözümü oluşturun. Derleme, MyControls.dlladlı bir DLL oluşturur.

WPF Barındırma Uygulamasını Uygulama

WindowsFormsHost'i barındırmak için WPF konak uygulaması MyControl1 denetimini kullanır. Uygulama, denetimden verileri almak için OnButtonClick olayını işler. Ayrıca, DENETIMIn bazı özelliklerini WPF uygulamasından değiştirmenize olanak tanıyan bir seçenek düğmeleri koleksiyonuna sahiptir. Aşağıdaki çizimde tamamlanmış uygulama gösterilmektedir.

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

WPF sayfasına eklenmiş bir denetimi gösteren ekran görüntüsü.

Projeyi Oluşturma

Projeyi başlatmak için:

  1. Visual Studio'yu açın ve Yeni Projeseçin.

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

  3. Yeni projeyi WpfHostolarak adlandırın.

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

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

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

  1. Çözüm Gezgini'nde proje adına sağ tıklayın ve Başvuru Ekleöğesini seçin.

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

  3. MyControls.dll'i seçin ve ardından Tamam'ne tıklayın.

  4. WindowsFormsIntegration.dllolarak adlandırılan WindowsFormsIntegration derlemesine bir başvuru ekleyin.

Temel Düzeni Uygulama

Ana bilgisayar uygulamasının kullanıcı arabirimi (UI), MainWindow.xaml dosyasında uygulanır. Bu dosya, düzeni tanımlayan ve Windows Forms denetimini barındıran Genişletilebilir Uygulama Biçimlendirme Dili (XAML) işaretlemesini içerir. Uygulama üç bölgeye ayrılır:

  • barındırılan denetimin çeşitli özelliklerini değiştirmek için kullanabileceğiniz seçenek düğmeleri 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 panelindeki Verileri.

  • Barındırılan denetimin kendisi.

Temel düzen aşağıdaki XAML'de gösterilir. MyControl1 barındırmak için gereken işaretleme bu örnekten çıkarılır, ancak daha sonra ele alınacaktır.

MainWindow.xaml dosyasındaki XAML değerini aşağıdakilerle değiştirin. Visual Basic kullanıyorsanız sınıfını x:Class="MainWindow"olarak değiştirin.

<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 öğesi, barındırılan denetimin çeşitli varsayılan özelliklerini değiştirmenize olanak tanıyan birkaç RadioButton denetimi kümesi içerir. Bunu, WindowsFormsHost'i içeren bir MyControl1 öğesi takip eder. Son StackPanel öğesi, barındırılan denetim tarafından döndürülen verileri görüntüleyen birkaç TextBlock öğesi içerir. Öğelerin ve Dock ve Height öznitelik ayarlarının sıralanması, barındırılan denetimi boşluk veya bozulma olmadan pencereye ekler.

Denetimi Barındırma

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

<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>

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

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

  • WindowsFormsHost, WPF uygulamasında Windows Forms denetimini barındırmanızı sağlayan WindowsFormsHost öğesini temsil eder.

  • mcl:MyControl1'ı temsil eden MyControl1, WindowsFormsHost öğesinin 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 planda kod dosyası, önceki bölümde açıklanan kullanıcı arabiriminin işlevselliğini uygulayan yordam kodunu içerir. Birincil görevler şunlardır:

  • MyControl1'nin OnButtonClick olayına bir olay işleyicisi eklemek.

  • Seçenek düğmeleri koleksiyonunun nasıl ayarlandığına bağlı olarak, MyControl1'ın çeşitli özelliklerini değiştirmek.

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

Uygulamayı Başlatma

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

MainWindow.xaml.vb veya MainWindow.xaml.cs MainWindow sınıfına aşağıdaki kodu 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

Önceden bahsedilen XAML, MyControl1WindowsFormsHost öğesinin alt öğe koleksiyonuna eklediğinden, WindowsFormsHostreferansını almak için Child öğesinin MyControl1'ünü dönüştürebilirsiniz. Bu başvurudan yararlanarak daha sonra OnButtonClick'a bir olay işleyicisi ekleyebilirsiniz.

WindowsFormsHost, denetimin kendisine bir başvuru sağlamaya ek olarak, denetimin uygulamadan işleyebileceğiniz bir dizi özelliğini kullanıma sunar. Başlatma kodu, bu değerleri uygulamada daha sonra kullanmak üzere özel genel değişkenlere atar.

MyControls DLL'deki türlere kolayca erişebilmek için dosyanın en üstüne aşağıdaki Imports veya using deyimini ekleyin.

Imports MyControls
using MyControls;

OnButtonClick Olayını İşleme

MyControl1, kullanıcı denetimin düğmelerinden birini tıklattığında OnButtonClick olayını tetikler.

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 paketlenir. Kullanıcı Tamam düğmesine tıklarsa, olay işleyicisi verileri ayıklar ve MyControl1altındaki panelde görüntüler.

Denetimin Özelliklerini Değiştirme

WindowsFormsHost öğesi barındırılan denetimin varsayılan özelliklerinden birkaçını kullanıma sunar. 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üğmeleri kümeleri, kullanıcının çeşitli renk ve yazı tipi özelliklerini değiştirmesine olanak tanır. Her düğme kümesinin, kullanıcının seçenek düğmesi seçimlerini algılayan ve denetimdeki ilgili özelliği değiştiren Click olayı için bir işleyicisi vardır.

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 metin ekleyin ve ardındanTamam'a tıklayın. Metin etiketlerde görünür. Denetim üzerindeki efekti görmek için farklı radyo düğmelerine tıklayın.

Ayrıca bakınız