PDA

View Full Version : آموزش کامل استفاده از windows controlها در پروژه wpf



MORTEZA66
دوشنبه 02 شهریور 1388, 12:40 عصر
سلام به همه
بسیاری از دوستان در مورد استفاده از 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 کنید
http://msdll.persiangig.com/projects/WinFormU.jpg

دوباره Add Reference را انتخاب کنید و در تب .Net گزینه System.Windows.Forms را انتخاب کرده و ok کنبد
http://msdll.persiangig.com/projects/WinFormV.jpg

این عمل باعث اضافه شدن اسمبلی مورد نیاز برای کار با 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



نمونه عکس خروجی:
http://msdll.persiangig.com/projects/output.jpg
کدها:


<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



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

Davood_amega
چهارشنبه 04 شهریور 1388, 09:38 صبح
بسیار ممنون.
آیا با این روش می شود در Wpf با Object های Windows Forms که به صورت شی گرا با بانک در ارتباط هستند(Linq To Sql Classes)کار کرد؟
اگر به این صورت باشد دیگر نیازی به Binding و کارهای اضافی در Wpf نمی باشد.

Mahdi.Kiani
چهارشنبه 04 شهریور 1388, 23:29 عصر
اگر به این صورت باشد دیگر نیازی به Binding و کارهای اضافی در Wpf نمی باشد.
سیستم binding در wpf بسیار قوی هست و قابل قیاس با اون جیزی که در ذهن شماس نیست. توصیه من این به شمنا این است که با wpf برنامه های wpf بنویسید!
اگر استفاده از رنج بسیاری از کنترل های winform برایتان حیاتی و ضرور ی است دلیل نداره که از wpf استفاده کنید.

goodarzi121
چهارشنبه 11 خرداد 1390, 16:30 عصر
سلام
آیا عکس این هم امکان پذیره؟
یعنی استفاده از wpf در برنامه های windows application؟



سلام به همه
بسیاری از دوستان در مورد استفاده از 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 کنید
http://msdll.persiangig.com/projects/WinFormU.jpg

دوباره Add Reference را انتخاب کنید و در تب .Net گزینه System.Windows.Forms را انتخاب کرده و ok کنبد
http://msdll.persiangig.com/projects/WinFormV.jpg

این عمل باعث اضافه شدن اسمبلی مورد نیاز برای کار با 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



نمونه عکس خروجی:
http://msdll.persiangig.com/projects/output.jpg
کدها:


<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



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

مهدی فرزاد
چهارشنبه 11 خرداد 1390, 20:46 عصر
سلام
آیا عکس این هم امکان پذیره؟
یعنی استفاده از wpf در برنامه های windows application؟

سلام
http://barnamenevis.org/showthread.php?288883-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-wpf-%D9%88-blend-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-User-Control-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-windows-application&p=1270822&viewfull=1#post1270822