Megosztás a következőn keresztül:


Útmutató: Windows Forms összetett vezérlő üzemeltetése a WPF-ben

A Windows Presentation Foundation (WPF) gazdag környezetet biztosít az alkalmazások létrehozásához. Ha azonban jelentős befektetéssel rendelkezik a Windows Forms-kódba, hatékonyabb lehet a kód legalább egy részét újra felhasználni a WPF-alkalmazásban ahelyett, hogy újraírni kellene az alapoktól. A leggyakoribb forgatókönyv az, ha meglévő Windows Forms-vezérlőkkel rendelkezik. Bizonyos esetekben előfordulhat, hogy még a forráskódhoz sem fér hozzá ezekhez a vezérlőkhöz. A WPF egyszerű eljárást biztosít az ilyen vezérlők WPF-alkalmazásokban való üzemeltetéséhez. Használhatja például a WPF-et a legtöbb programozáshoz a speciális DataGridView vezérlők üzemeltetése közben.

Ez az útmutató végigvezeti egy olyan alkalmazáson, amely egy Windows Forms összetett vezérlőt üzemeltet az adatbevitel WPF-alkalmazásokban való végrehajtásához. Az összetett vezérlő dll-fájlba van csomagolva. Ez az általános eljárás összetettebb alkalmazásokra és vezérlőkre is kiterjeszthető. Ez az útmutató úgy lett kialakítva, hogy szinte azonos megjelenésű és funkcionalitású legyen a bemutatóhoz: WPF összetett vezérlő üzemeltetése a Windows Formsban. Az elsődleges különbség az, hogy az üzemeltetési forgatókönyv fordított.

Az útmutató két részre van osztva. Az első szakasz röviden ismerteti a Windows Forms összetett vezérlőjének implementálását. A második szakasz részletesen ismerteti, hogyan üzemeltetheti az összetett vezérlőt egy WPF-alkalmazásban, hogyan fogadhat eseményeket a vezérlőből, és hogyan férhet hozzá a vezérlő egyes tulajdonságaihoz.

Az ebben az útmutatóban bemutatott feladatok a következők:

  • A Windows Forms összetett vezérlőjének implementálása.

  • A WPF-gazdaalkalmazás implementálása.

Az ebben az útmutatóban bemutatott feladatok teljes kódlistájáért lásd: Windows Forms Composite Control üzemeltetése WPF-mintában.

Előfeltételek

Az útmutató elvégzéséhez a Visual Studióra van szüksége.

A Windows Forms összetett vezérlőjének implementálása

Az ebben a példában használt Windows Forms összetett vezérlő egy egyszerű adatbeviteli űrlap. Ez az űrlap begyűjti a felhasználó nevét és címét, majd egy egyéni esemény használatával adja vissza ezeket az adatokat a gazdagépnek. Az alábbi ábrán a renderelt vezérlő látható.

Az alábbi képen egy Windows Forms összetett vezérlő látható:

Képernyőkép egy egyszerű Windows Forms-vezérlőről.

A projekt létrehozása

A projekt indítása:

  1. Indítsa el a Visual Studiót, és nyissa meg az Új projekt párbeszédpanelt.

  2. Az Ablak kategóriában válassza a Windows Forms Vezérlőtár sablont.

  3. Nevezze el az új projektet MyControls.

  4. A helyhez adjon meg egy kényelmesen elnevezett legfelső szintű mappát, például WpfHostingWindowsFormsControl. Később ebbe a mappába helyezi a gazdaalkalmazást.

  5. Kattintson OK gombra a projekt létrehozásához. Az alapértelmezett projekt egy UserControl1nevű vezérlőt tartalmaz.

  6. A Megoldáskezelőben nevezze át UserControl1MyControl1.

A projektnek a következő rendszer DLL-ekre kell hivatkoznia. Ha ezek közül a DLL-ek közül bármelyik alapértelmezés szerint nem szerepel, vegye fel őket a projektbe.

  • Rendszer

  • System.Data

  • System.Drawing

  • System.Windows.Forms

  • System.Xml

Vezérlők hozzáadása az űrlaphoz

Vezérlők hozzáadása az űrlaphoz:

  • Nyissa meg MyControl1 a tervezőben.

Adjon hozzá öt Label vezérlőt és a hozzájuk tartozó TextBox vezérlőket, méretezve és rendezve az előző ábrán látható módon az űrlapon. A példában a TextBox vezérlők neve a következő:

  • txtName

  • txtAddress

  • txtCity

  • txtState

  • txtZip

Adjon hozzá két vezérlőt Button, amelyeket OK és Mégse címkékkel láttak el. A példában a gombok neve btnOK és btnCancel.

A támogató kód megvalósítása

Nyissa meg az űrlapot kódnézetben. A vezérlő az egyéni OnButtonClick esemény aktiválásával szolgáltatja vissza az összegyűjtött adatokat a gazdagépnek. Az adatok az eseményargumentum-objektumban találhatók. Az alábbi kód az eseményt és a delegált deklarációját jeleníti meg.

Adja hozzá az alábbi kódot a MyControl1 osztályhoz.

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

A MyControlEventArgs osztály tartalmazza azokat az információkat, amelyeket vissza kell adni a gazdagépnek.

Adja hozzá az alábbi osztályt az űrlaphoz.

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

Amikor a felhasználó az OK vagy a Mégse gombra kattint, az Click eseménykezelők létrehoznak egy MyControlEventArgs objektumot, amely tartalmazza az adatokat, és kiváltja az OnButtonClick eseményt. A két kezelő között az egyetlen különbség az eseményargumentum tulajdonsága IsOK . Ez a tulajdonság lehetővé teszi a gazdagépnek, hogy megállapítsa, melyik gombra kattintott. true az OK gombra van beállítva, és false a Mégse gombra. Az alábbi kód a két gombkezelőt mutatja be.

Adja hozzá az alábbi kódot a MyControl1 osztályhoz.

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

Erős név megadása a közgyűlésnek és a közgyűlés felépítése

Ahhoz, hogy egy WPF-alkalmazás hivatkozzon erre a szerelvényre, erős névvel kell rendelkeznie. Erős név létrehozásához hozzon létre egy kulcsfájlt Sn.exe, és adja hozzá a projekthez.

  1. Nyisson meg egy Visual Studio-parancssort. Ehhez kattintson a Start menüre, majd válassza a Minden program/Microsoft Visual Studio 2010/Visual Studio Tools/Visual Studio parancssort. Ezzel elindít egy konzolablakot, amely testre szabott környezeti változókkal rendelkezik.

  2. A parancssorban a cd paranccsal lépjen a projektmappába.

  3. Hozzon létre egy MyControls.snk nevű kulcsfájlt az alábbi parancs futtatásával.

    Sn.exe -k MyControls.snk
    
  4. A kulcsfájl projektbe való belefoglalásához kattintson a jobb gombbal a projekt nevére a Megoldáskezelőben, majd kattintson a Tulajdonságok parancsra. A Projekttervezőben kattintson az Aláírás fülre, jelölje be a szerelvény aláírása jelölőnégyzetet, majd keresse meg a kulcsfájlt.

  5. Hozza létre a megoldást. A build létrehoz egy MyControls.dllnevű DLL-t.

A WPF-gazdaalkalmazás implementálása

A WPF gazdaalkalmazás a WindowsFormsHost vezérlőt használja a MyControl1 befogadására. Az alkalmazás kezeli az eseményt, OnButtonClick hogy megkapja az adatokat a vezérlőtől. Emellett olyan választógombok gyűjteménye is található benne, amelyek lehetővé teszik a vezérlő egyes tulajdonságainak módosítását a WPF-alkalmazásból. Az alábbi ábrán a kész alkalmazás látható.

Az alábbi képen a teljes alkalmazás látható, beleértve a WPF-alkalmazásba beágyazott vezérlőt is:

Képernyőkép egy WPF-lapba beágyazott vezérlőről.

A projekt létrehozása

A projekt indítása:

  1. Nyissa meg a Visual Studiót, és válassza az Új projekt lehetőséget.

  2. Az Ablak kategóriában válassza ki a WPF-alkalmazássablont .

  3. Nevezze el az új projektet WpfHost.

  4. A helyhez adja meg ugyanazt a felső szintű mappát, amely a MyControls-projektet tartalmazza.

  5. Kattintson OK gombra a projekt létrehozásához.

A MyControl1-t és más összeállításokat tartalmazó DLL-ekre mutató hivatkozásokat is hozzá kell adnia.

  1. Kattintson a jobb gombbal a projekt nevére a Megoldáskezelőben, és válassza a Hivatkozás hozzáadása lehetőséget.

  2. Kattintson a Tallózás fülre, és keresse meg azt a mappát, amely tartalmazza a MyControls.dllelemet. Ebben az útmutatóban ez a mappa a MyControls\bin\Debug.

  3. Válassza MyControls.dll, majd kattintson OKgombra.

  4. Adjon hozzá egy hivatkozást a WindowsFormsIntegration.dllnevű WindowsFormsIntegration összetevőhöz.

Az alapszintű elrendezés implementálása

A gazdaalkalmazás felhasználói felülete (UI) a MainWindow.xaml-ben implementálva van. Ez a fájl Extensible Application Markup Language (XAML) jelölést tartalmaz, amely meghatározza az elrendezést, és tartalmazza a Windows Forms vezérlőt. Az alkalmazás három régióra oszlik:

  • A Vezérlőpult tulajdonságai panel, amely olyan választógombok gyűjteményét tartalmazza, amelyekkel módosíthatja az üzemeltetett vezérlő különböző tulajdonságait.

  • A Vezérlőpult adatai , amely több TextBlock olyan elemet tartalmaz, amelyek az üzemeltetett vezérlőből visszaadott adatokat jelenítik meg.

  • A üzemeltetett vezérlő maga.

Az alapszintű elrendezés az alábbi XAML-ben jelenik meg. A MyControl1 hosztolásához szükséges jelölőnyelvet kihagytuk ebből a példából, de később tárgyaljuk.

Cserélje le az XAML-t a MainWindow.xaml fájlban a következőre. Ha Visual Basicet használ, módosítsa az osztályt a következőre 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>

Az első StackPanel elem több vezérlőkészletet RadioButton tartalmaz, amelyek lehetővé teszik a üzemeltetett vezérlő különböző alapértelmezett tulajdonságainak módosítását. Ezt egy WindowsFormsHost elem követi, amely befogadja a MyControl1-t. Az utolsó StackPanel elem több TextBlock olyan elemet tartalmaz, amelyek az üzemeltetett vezérlő által visszaadott adatokat jelenítik meg. Az elemek sorrendje és az DockHeight attribútumbeállítások hézagok és torzítás nélkül ágyazzák be a központi vezérlőt az ablakba.

A vezérlő üzemeltetése

Az előző XAML következő szerkesztett verziója a szükséges MyControl1 elemekre összpontosít, amelyek a befogadásához kellenek.

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

A xmlns névtérleképezési attribútum a üzemeltetett vezérlőt tartalmazó névtérre MyControls mutató hivatkozást hoz létre. Ez a leképezés lehetővé teszi az XAML-ben a következőként való megjelenítését MyControl1<mcl:MyControl1>: .

Az XAML két eleme kezeli az üzemeltetést:

  • WindowsFormsHost Az az WindowsFormsHost elem, amely lehetővé teszi a Windows Forms-vezérlők WPF-alkalmazásokban való üzemeltetését.

  • mcl:MyControl1, amely jelképezi a MyControl1 elemet, hozzáadódik a WindowsFormsHost elem gyermekgyűjteményéhez. Ennek eredményeképpen ez a Windows Forms-vezérlő a WPF ablak részeként jelenik meg, és az alkalmazásból kommunikálhat a vezérlővel.

A Code-Behind fájl implementálása

A mögöttes kódfájl (MainWindow.xaml.vb vagy MainWindow.xaml.cs) az előző szakaszban tárgyalt felhasználói felület funkcióit megvalósító eljárási kódot tartalmazza. Az elsődleges feladatok a következők:

  • Az MyControl1OnButtonClick eseményéhez eseménykezelő csatolása.

  • A beállításgombok gyűjteményének beállítása alapján módosíthatja MyControl1 különböző tulajdonságait.

  • A vezérlő által gyűjtött adatok megjelenítése.

Az alkalmazás inicializálása

Az inicializálási kód az ablak Loaded eseményének eseménykezelőjében található, és egy eseménykezelőt csatol a vezérlő eseményéhez OnButtonClick .

A MainWindow.xaml.vb vagy MainWindow.xaml.cs adja hozzá a következő kódot az MainWindow osztályhoz.

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

Mivel az XAML-ről korábban beszéltünk, amely MyControl1 elemet adott az WindowsFormsHost elem gyermekelem-gyűjteményéhez, típuskonverzióval megkaphatja az WindowsFormsHost elem Child hivatkozását a MyControl1 elemre. Ezzel a hivatkozással eseménykezelőt csatolhat a OnButtonClick elemhez.

A vezérlőre való hivatkozás mellett a vezérlő WindowsFormsHost számos tulajdonságát is elérhetővé teszi, amelyeket az alkalmazásból kezelhet. Az inicializálási kód ezeket az értékeket magánhálózati globális változókhoz rendeli az alkalmazás későbbi használatához.

Annak érdekében, hogy könnyen hozzáférhessen a MyControls DLL-ben található típusokhoz, adja hozzá az alábbi Imports vagy using utasítást a fájl tetejére.

Imports MyControls
using MyControls;

Az OnButtonClick esemény kezelése

MyControl1 akkor aktiválja az OnButtonClick eseményt, amikor a felhasználó a vezérlő valamelyik gombjára kattint.

Adja hozzá az alábbi kódot a MainWindow osztályhoz.

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

A szövegdobozokban lévő adatok az objektumba MyControlEventArgs vannak csomagolva. Ha a felhasználó az OK gombra kattint, az eseménykezelő kinyeri az adatokat, és megjeleníti az alábbi MyControl1panelen.

A vezérlő tulajdonságainak módosítása

Az WindowsFormsHost elem az üzemeltetett vezérlő számos alapértelmezett tulajdonságát teszi elérhetővé. Ennek eredményeképpen módosíthatja a vezérlő megjelenését, hogy jobban megfeleljen az alkalmazás stílusának. A bal oldali panel választógombjai lehetővé teszik a felhasználó számára, hogy több szín- és betűtulajdonságt módosítson. Minden gombnak van egy kezelője az Click eseményhez, amely észleli a felhasználó választógombjainak kijelölését, és módosítja a vezérlő megfelelő tulajdonságát.

Adja hozzá az alábbi kódot a MainWindow osztályhoz.

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

Hozza létre és futtassa az alkalmazást. Adjon hozzá néhány szöveget a Windows Forms összetett vezérlőjében, majd kattintson az OK gombra. A szöveg megjelenik a címkékben. Kattintson a különböző választógombokra a vezérlőre gyakorolt hatás megtekintéséhez.

Lásd még