سلام
آیا عکس این هم امکان پذیره؟
یعنی استفاده از wpf در برنامه های windows application؟


نقل قول نوشته شده توسط MORTEZA66 مشاهده تاپیک
سلام به همه
بسیاری از دوستان در مورد استفاده از 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



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