İ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. 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'da 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 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.
Ön koş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 işlenen denetim gösterilmektedir.
Aşağıdaki görüntüde Bir Windows Forms bileşik denetimi gösterilmektedir:
Projeyi Oluşturma
Projeyi başlatmak için:
Visual Studio'yu başlatın ve Yeni Proje iletişim kutusunu açın.
Pencere kategorisinde Windows Forms Denetim Kitaplığı şablonunu seçin.
Yeni projeyi
MyControls
olarak adlandırın.Konum için, gibi
WpfHostingWindowsFormsControl
uygun bir şekilde adlandırılmış en üst düzey klasör belirtin. Daha sonra konak uygulamasını bu klasöre yerleştireceksiniz.Projeyi oluşturmak için Tamam'a tıklayın. Varsayılan proje adlı
UserControl1
tek bir denetim içerir.Çözüm Gezgini'da olarak yeniden adlandırın
UserControl1
MyControl1
.
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:
- Tasarımcıda açın
MyControl1
.
Formda, önceki çizimde olduğu gibi boyutlandırılmış ve düzenlenmiş beş Label denetim ve bunlara karşılık gelen TextBox denetimleri ekleyin. Örnekte, TextBox denetimler şu şekilde adlandırılır:
txtName
txtAddress
txtCity
txtState
txtZip
Tamam ve İptal etiketli iki Button denetim ekleyin. Örnekte düğme adları sırasıyla ve btnCancel
şeklindedirbtnOK
.
Destekleyici Kodu Uygulama
Formu kod görünümünde açın. Denetim, özel OnButtonClick
olayı yükselterek toplanan verileri konağına döndürür. 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
sınıfı, MyControlEventArgs
konağa döndürülecek 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üğmesine tıkladığında, Click olay işleyicileri verileri içeren bir MyControlEventArgs
nesne oluşturur ve olayı başlatırOnButtonClick
. İ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. Tamam düğmesi ve false
İptal düğmesi için olarak ayarlanırtrue
. 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. Kesin ad oluşturmak için Sn.exe ile bir anahtar dosyası oluşturun ve bunu projenize ekleyin.
Visual Studio komut istemi açın. Bunu yapmak için Başlat menüsüne tıklayın ve ardından Tüm Programlar/Microsoft Visual Studio 2010/Visual Studio Araçları/Visual Studio Komut İstemi'ni seçin. Bu, özelleştirilmiş ortam değişkenleri içeren bir konsol penceresi başlatır.
Komut isteminde komutunu kullanarak
cd
proje klasörünüze gidin.Aşağıdaki komutu çalıştırarak MyControls.snk adlı bir anahtar dosyası oluşturun.
Sn.exe -k MyControls.snk
Anahtar dosyasını projenize eklemek için, Çözüm Gezgini'da proje adına sağ tıklayın ve ardından Özellikler'e tıklayın. Proje Tasarım Aracı İmzalama sekmesine tıklayın, Derlemeyi imzala onay kutusunu seçin ve anahtar dosyanıza göz atın.
Çözümü oluşturun. Derleme, MyControls.dll adlı bir DLL oluşturur.
WPF Ana Bilgisayar Uygulamasını Uygulama
WPF konak uygulaması, barındırmak WindowsFormsHost için MyControl1
denetimini kullanır. Uygulama, denetimden verileri almak için olayı işler OnButtonClick
. 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:
Projeyi Oluşturma
Projeyi başlatmak için:
Visual Studio'yu açın ve Yeni Proje'yi seçin.
Pencere kategorisinde WPF Uygulaması şablonunu seçin.
Yeni projeyi
WpfHost
olarak adlandırın.Konum için MyControls projesini içeren en üst düzey klasörü belirtin.
Projeyi oluşturmak için Tamam'a tıklayın.
Ayrıca, ve diğer derlemeleri içeren MyControl1
DLL'ye başvurular eklemeniz gerekir.
Çözüm Gezgini proje adına sağ tıklayın ve Başvuru Ekle'yi seçin.
Gözat sekmesine tıklayın ve MyControls.dll dosyasını içeren klasöre gidin. Bu izlenecek yol için bu klasör MyControls\bin\Debug klasörüdür.
MyControls.dll dosyasını seçip Tamam'a tıklayın.
WindowsFormsIntegration.dll adlı 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 bir seçenek düğmeleri koleksiyonu içeren Denetim Özellikleri paneli.
Barındırılan denetimden döndürülen verileri görüntüleyen çeşitli TextBlock öğeleri içeren Denetim Masası'ndaki Veriler.
Barındırılan denetimin kendisi.
Temel düzen aşağıdaki XAML'de gösterilir. Barındırmak MyControl1
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ı olarak x:Class="MainWindow"
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 öğe, barındırılan denetimin RadioButton çeşitli varsayılan özelliklerini değiştirmenize olanak tanıyan çeşitli denetim kümeleri içerir. Bunu barındıran bir WindowsFormsHost öğesi MyControl1
izler. Son StackPanel öğe, barındırılan denetim tarafından döndürülen verileri görüntüleyen birkaç TextBlock öğe içerir. Öğelerin ve ve DockHeight ö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ü, barındırmak MyControl1
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>
Ad alanı eşleme özniteliği, xmlns
barındırılan MyControls
denetimi içeren ad alanına bir başvuru oluşturur. Bu eşleme, XAML'de olarak <mcl:MyControl1>
temsil MyControl1
etmenizi sağlar.
XAML'deki iki öğe barındırmayı işler:
WindowsFormsHost
WindowsFormsHost bir WPF uygulamasında Windows Forms denetimini barındırmanıza olanak tanıyan öğeyi temsil eder.mcl:MyControl1
öğesini temsilMyControl1
eden , öğesinin alt koleksiyonuna WindowsFormsHost eklenir. Sonuç olarak, bu Windows Forms denetimi WPF penceresinin bir parçası olarak işlenir ve uygulamadan denetimle iletişim kurabilirsiniz.
Arka Planda Kod 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:
'nin
OnButtonClick
olayınaMyControl1
bir olay işleyicisi ekleniyor.seçenek düğmeleri koleksiyonunun
MyControl1
nasıl ayarlandıklarına bağlı olarak çeşitli özelliklerini değiştirme.Denetim tarafından toplanan verileri görüntüleme.
Uygulamayı Başlatma
Başlatma kodu, pencerenin Loaded olayı için bir olay işleyicisinde bulunur ve denetimin OnButtonClick
olayına bir olay işleyicisi ekler.
MainWindow.xaml.vb veya MainWindow.xaml.cs içinde sınıfına MainWindow
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
XAML daha önce öğenin alt öğe koleksiyonuna eklendiğinden MyControl1
WindowsFormsHostWindowsFormsHost, öğesine başvuru MyControl1
almak için öğesinin Child öğelerini yayınlayabilirsiniz. Daha sonra bu başvurudan yararlanarak öğesine bir olay işleyicisi OnButtonClick
ekleyebilirsiniz.
Denetimin kendisine bir başvuru sağlamaya ek olarak, WindowsFormsHost 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.
DLL'deki MyControls
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 OnButtonClick
düğmelerinden birini tıklattığında olayı 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 nesnenin MyControlEventArgs
içine paketlenir. Kullanıcı Tamam düğmesine tıklarsa, olay işleyicisi verileri ayıklar ve aşağıdaki MyControl1
panelde görüntüler.
Denetimin Özelliklerini Değiştirme
öğesi, WindowsFormsHost 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 bir işleyicisi Click 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 tamam'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 bkz.
.NET Desktop feedback