سلام به همه
بسیاری از دوستان در مورد استفاده از wpf در windows application یا یه همچین چیزی سوال می پرسیدند(مثلا استفاده از کنترلهای winappدر wpf) و از اونجا که من هیچ جواب قانع کننده ای در این مورد پیدا نکردم گفتم ابن مطلب رو بذارم شاید مفبد باشه
عنوان: استفاده از Windows Forms Controls در wpf
مرحله اول: ایجاد یک wpf application که همه بلدند
مرحله دوم: اضافه کردن Reference "Windows FormsIntegration " و فضای نام Windows Formsبه پروژه
از منوی project گزینه Add Reference.. را انتخاب کنید و سپ به تب Browse بروید و سپس به آدرس
" C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 " بروید و فابل WindowsFormsIntegration.dll را انتخاب کرده و ok کنید


دوباره Add Reference را انتخاب کنید و در تب .Net گزینه System.Windows.Forms را انتخاب کرده و ok کنبد


این عمل باعث اضافه شدن اسمبلی مورد نیاز برای کار با windows forms control در پروژه wpf شما می شود
مرحله سوم: در فایل xaml خود name space زیر را در تگwindows اضافه کنید

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Win dows.Forms"

پس از این کار تگ window شما مشابه زیر خواهد بود:

<Window x:Class="WinFormInWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Win dows.Forms"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>

</Grid>
</Window>



مرحله چهارم: اضافه کردن Windows Forms control به xaml
برای ساختن Windows Forms control دو راه وجود دارد.
ما میتوانیم Windows Forms control مان را در کد xaml و با syntax آن ایجاد کنیم یا اینکه ان را در زمان اجرا و با استفاده از کدهای فرم مان و syntax وی بی یا C#‎ ایجاد کنیم.
برای ایجاد از طریق کد xaml :
هر ویندوز کنترل در wpf باید در تگی بنام <WindowsFormsHost> قرار بگیرد مانند زیر:

<Grid>
<WindowsFormsHost>
<wf:NumericUpDown x:Name="num1" />

</WindowsFormsHost>
</Grid>



برای اینکه بتوانیم با این کنترل ها کار کنیم بایستی name space انها را به پروژه و در فایل Window1.xaml.vb اضافه کنیم به صورت زیر

Imports System.Windows.Forms
Imports System.Windows.Forms.Integration



برای استفاده از این کنترل ها می توانید مانند زیر و از نام آنها استفاده کنید


Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
num1.Minimum = 0
num1.Maximum = 90000
num1.Value = 1234
num1.UpDownAlign = LeftRightAlignment.Right
num1.BorderStyle = BorderStyle.Fixed3D
End Sub



نمونه عکس خروجی:

کدها:

<WindowsFormsHost Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" >
<wf:NumericUpDown x:Name="num1" />
</WindowsFormsHost>



نکته: برای ایجاد در محیط کدنویسی با syntax وی بی


Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim host As New WindowsFormsHost
Dim num1 As New System.Windows.Forms.NumericUpDown
host.Child = num1
mygrid.children.add(host)
End Sub



نکته: تمامی این مراحل به صورت دستی تست و اجرا شده است و صرف نوشتن نبوده.
موفق و پیروز باشید.