Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ó:
A projekt létrehozása
A projekt indítása:
Indítsa el a Visual Studiót, és nyissa meg az Új projekt párbeszédpanelt.
Az Ablak kategóriában válassza a Windows Forms Vezérlőtár sablont.
Nevezze el az új projektet
MyControls.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.Kattintson OK gombra a projekt létrehozásához. Az alapértelmezett projekt egy
UserControl1nevű vezérlőt tartalmaz.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
MyControl1a 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ő:
txtNametxtAddresstxtCitytxtStatetxtZip
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.
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.
A parancssorban a
cdparanccsal lépjen a projektmappába.Hozzon létre egy MyControls.snk nevű kulcsfájlt az alábbi parancs futtatásával.
Sn.exe -k MyControls.snkA 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.
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:
A projekt létrehozása
A projekt indítása:
Nyissa meg a Visual Studiót, és válassza az Új projekt lehetőséget.
Az Ablak kategóriában válassza ki a WPF-alkalmazássablont .
Nevezze el az új projektet
WpfHost.A helyhez adja meg ugyanazt a felső szintű mappát, amely a MyControls-projektet tartalmazza.
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.
Kattintson a jobb gombbal a projekt nevére a Megoldáskezelőben, és válassza a Hivatkozás hozzáadása lehetőséget.
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.
Válassza MyControls.dll, majd kattintson OKgombra.
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:
WindowsFormsHostAz 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 aMyControl1elemet, 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
MyControl1OnButtonClickeseményéhez eseménykezelő csatolása.A beállításgombok gyűjteményének beállítása alapján módosíthatja
MyControl1kü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
.NET Desktop feedback