نمایش نتایج 1 تا 8 از 8

نام تاپیک: تبدیل WinForm به WPF مرجع کامل

  1. #1
    کاربر دائمی
    تاریخ عضویت
    دی 1390
    محل زندگی
    رودبارجنوب
    سن
    31
    پست
    171

    Red face تبدیل WinForm به WPF مرجع کامل

    در آغاز از مدیران تالار می خوام گیر ندن به مضوع تالار چون که هم مربوط به تالار سی شارپ هم وی بی دات نت و هم وی پی اف هست اما من توی این تالار گذاشتم تا دوستان کلا از وین فرم دل بکنن .



    سلام بر تمامی دوستان عزیز ، با توجه به تجاربی که در زمینه تبدیل WinForm به WPF دارم راه های زیر رو بهتون پیشنهاد می کنم برای اینکه پروژه تون رو بدون کد نویسی دوباره در همون حالت تعریف پروژه ی وین فرم اجزای اون یعنی فرم ها رو به بصورت WPF در آرید که هیچ فرقی با در پروژه ی ایجاد شده با خود WPF نکنه ، مراحل زیر را به ترتیب دنبال کنید ;

    نکات آغازین
    <ویژوال استادیو 2012/2010><نت فریم وورک 4 یا 4.5><آخر کار پروژه برای دانلود گذاشته شده><قسمت جالبش اینجاست که استایل مترو روی ویندوز ایکس پی هم اجرا میشه>

    1-برای اونایی که پروژه خود رو با VB.NET WinForm ایجاد کرده اند ابتدا Designer فرم مورد نظر رو در سایت زیر وارد کنید و انرو تبدیل به سی شارپ کنید بعدا متوجه خواهید شد
    http://converter.telerik.com

    بعد از اینکه سورس Designer فرم مورد نظر تبدیل به C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎.NET شد اونرو کپی و در ابزار تبدیل وین فرم به WPF سایت زیر وارد کنید
    http://www.win2wpf.com

    بعد از اینکه کد های Designer وین فرم تبدیل به XAML شدند به مراحل زیر توجه کنید :

    این نمونه ی فرم پروژه ی ایجاد شده است



    در اولین مرحله نیاز به یک WPF User Control هست مانند شکل زیر ایجاد می کنیم :



    بعد ، کد های XAML تبدیل شده رو در XAML یوزر کنترل وی پی اف Paste می کنیم تا به شکل زیر در آید



    حالا می خوام بطور سفارشی ظاهر WPF رو تبدیل به سبک مترو کنم دوستان عزیز اینجا ما باید از ابزار
    NuGet Tool استفاده کنیم برای نصب یه بسته اضافی بنام MahApps.Metro ، به تصاویر زیر نگاه کنید



    توجه کنید که برای یافتن سریع بسته ی مورد نظر MahApps.Metro را جستجو کنید .
    روی دکمه ی Install کلیک می کنیم تا بسته نصب شود





    برای اینکه فایل یوزر کنترل WPF از سبک مترو استفاده کنه و همچنین از UcserControl تبدیل به Window بشه کد زیر رو از

    <UserControl x:Class="MyWinFormApp.UserControl1"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"


    تبدیل بشه به

    <controls:MetroWindow x:Class="MyWinFormApp.UserControl1"  
    xmlns:controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps. Metro"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"


    فراموش کنید تگ خروجی رو از

    </UserControl>

    تبدیل به

    </controls:MetroWindow>

    کنید

    یه چیز دیگه برای سی شارپ

    </controls:MetroWindow>

    برای وی بی دات نت بصورت زیر

    </Controls:MetroWindow>

    باشه

    دوستان عزیز سی شارپی توجه فرمایند که باید کد فایل سی شارپ (xaml.cs) رو

    از

    public partial class UserControl1 : UserControl  
    {
    public UserControl1()
    {
    InitializeComponent();
    }
    }

    به

    public partial class UserControl1  
    {
    public UserControl1()
    {
    InitializeComponent();
    }
    }

    تبدیل بشه ;

    در طول کامپایل کردن ممکنه ارور زیر ظاهر بشه که آخرش نوشته

    You Must Add a Refrence to assembly ...



    برای رفع این ارور به تصاویر زیر نگاه کنید ;





    برای اینکه WinForm رو فراموش کنیم و حالا از WPF زیبا استفاده کنیم کدهای زیر رو در فایل Program.cs
    تغییر بدید ;

    C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎

     static void Main()  
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    Application.Run(new Form1());
    }

    به

    static void Main()  
    {
    UserControl1 uc1 = new UserControl1();
    uc1.ShowDialog();
    }


    برای VB.NET باید Propertis پروژه رو باز کرد و گزینه ی Enable Application Fremework رو از تیک بردارید



    بعد یه ماژول به نام Program ایجاد کنید و کد های زیر رو داخلش قرار بدید

    ''' <summary>
    ''' The main entry point for the application.
    ''' </summary>
    Sub Main()
    'Application.EnableVisualStyles()
    'Application.SetCompatibleTextRenderingDefault(Fal se)
    'Application.Run(New Form1())

    Dim uc1 As UserControl1 = New UserControl1
    uc1.ShowDialog()

    End Sub


    دوباره Propertis پروژه رو باز کنید و حالا در قسمت Startup object گزینه ی Sub Main رو انتخاب کنید



    برنامه رو بشکل Start Without Debugging اجرا کنید پنجره ی وی پی اف بصورت زیر نمایش داده می شود



    ناراحت نشید این سبک پیش فرضش هست برای حل مشکل کد های زیر رو قبل از تگ آغازین <Grid>
    اضافه کنید فقط توجه داشته باشید برای وی بی دات نت باید controls بصورت Controls باشد

     <controls:MetroWindow.Resources>  
    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    </controls:MetroWindow.Resources>




    حالا پنجره ای شبیه شکل زیر نمایش داده می شه



    برای اینکه پنجره ی وی پی اف به خوبی نمایش داده بشه کد های XAML زیر را از فایل UserControl پاک کنید

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    mc:Ignorable="d"

    و همچنین کدهای زیر رو

    d:DesignHeight="300" d:DesignWidth="300"

    رو به کد های زیر

    Height="300" Width="300"

    تغییر بدید

    اما یک اشکال البته در پروژه های وی بی دات نت ، اگر شما خواستید Target framework پروژه تون رو از 4 به 4.5 یا بالعکس تبدیل کنید هنگام کامپایل خطا می ده خیلی راحت می تونید رفع اشکال کنید برای حل این مشکل به قسمت References پروژه برید و دو رفرنس MahApps.Metro و System.Windows.Interactivity رو حذف کنید و دوباره و اینبار با توجه به نسخه فریم وورک رفرنس های مورد نظر را وارد کنید که در مسیر پروژه ی مورد نظر هستند با راست کلیک روی Solution پروژه و انتخاب
    Open Folder In File Explorer پوشه راه حل پروژه باز میشه بعد به مسیر زیر برید

    نت فریم وورک 4

    packages\MahApps.Metro.0.10.1.1\lib\net40


    نت فریم وورک 4.5

    packages\MahApps.Metro.0.10.1.1\lib\net45


    اما نکاتی برای دوستانی که پروژه های سنگین با فرم های زیاد دارند و همچنین اونایی که در پروژه شون از کامپوننت های مختلف استفاده می کنند باید توجه داشته باشند که ابتدا پروژه شون به فرم اصلی یا همون اجرایی پروژه رو بهش متمرکز شوند و اون رو بصورت دستی ازش مانند وی پی اف بسازند و نکنه این کار اشتباه رو کنند و بیان کل فرم ها رو به وی پی اف تبدیل کنند این کار اشتباهه باید برنامه ریزی کنند مثلا در هر نسخه ی برنامه یک فرم تبدیل به وی پی اف بشه بعد از اینکه همه ی فرم ها مثلا بعد از مثلا دو ماه تبدیل به وی پی اف شد حالا می تونند یه پروژه ی خالی وی پی اف بسازند و فرم های وی پی اف رو داخلش کپی کنند بعد با زدن گزینه ی Show Hidden Files و انتخاب همه ی فایل ها و راست کلیک روی آنها و انتخاب گزینه ی InClude In Project به طور کلی پروژه شون تبدیل به وی پی اف بشه .

    نکته ی شماره 2 خیلی مهم : برای ایجاد فرم های دیگر بصورت وی پی اف توجه داشته باشید که دو نوع برخورد با این فرم های وجود داره

    ابتدا متغیر فرم 2 رو در فایل Program تعریف می کنیم

    Module Program
    ''' <summary>
    ''' The main entry point for the application.
    ''' </summary>
    Friend uc2 As New UserControl2()
    Sub Main()
    'Application.EnableVisualStyles()
    'Application.SetCompatibleTextRenderingDefault(Fal se)
    'Application.Run(New Form1())

    Dim uc1 As UserControl1 = New UserControl1
    uc1.ShowDialog()

    End Sub
    End Module


    دو حالت برای باز کردن فرم داریم

    1-اول اینکه ما بخواییم بصورت Show. بازشون کنیم برای همین به کد های زیر دقت کنید

    برای باز کردن برنامه از فرم 1 بصورت Show

    Private Sub Button_Click_1(sender As Object, e As Windows.RoutedEventArgs)
    'باز کردن فرم 2
    uc2.Show()
    End Sub

    وقتی که فرم شماره 2 بطور کامل خارج شد


    Private Sub UserControl2_Closed_1(sender As Object, e As EventArgs)
    'وقتی از فرم 2 بطور کامل خارج شدیم
    uc2 = New UserControl2
    End Sub


    2. حالت باز کردن فرم بصورت ShowDialog

    برای باز کردن برنامه از فرم 1 بصورت ShowDialog

    Private Sub Button_Click_1(sender As Object, e As Windows.RoutedEventArgs)
    'باز کردن فرم 2
    uc2.ShowDialog()
    End Sub

    رخ داد خارج شدن فرم شماره ی 2

    Private Sub UserControl2_Closing_1(sender As Object, e As System.ComponentModel.CancelEventArgs)
    'هنگام خارج شدن فرم 2
    e.Cancel = True
    Me.Hide()
    End Sub


    نکته ی شماره 3 : دوستانی که در پروژه شون اگه می خوان از وین فرم نیز استفاده کنند مطمئنن باید دو خط کد زیر رو در ماژول Program داشته باشند

    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)

    مثال

    Module Program
    ''' <summary>
    ''' The main entry point for the application.
    ''' </summary>
    Friend uc2 As New UserControl2()
    Sub Main()
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)
    'Application.Run(New Form1())

    Dim uc1 As UserControl1 = New UserControl1
    uc1.ShowDialog()

    End Sub
    End Module

    حالا برای ایجاد دکمه های گوناگون و انواع کنترل ها به سایت زیر برید :



    http://mahapps.com/MahApps.Metro/

    دانلود پروژه
    MyWinFormApp.part1.rar
    MyWinFormApp.part2.rar

    اگه سؤالی داشتید در خدمتیم . تشکر یادتون نره .

  2. #2
    کاربر دائمی
    تاریخ عضویت
    دی 1390
    محل زندگی
    رودبارجنوب
    سن
    31
    پست
    171

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    برای اضافه کردن اسپلش اسکرین دو راه وجود دارد

    اول : اگه فرم پنجره وین فرم باشه

    Module Program

    Dim splashTimer As Timer

    Sub Main()
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)

    splashTimer = New Timer()
    AddHandler splashTimer.Tick, AddressOf TimerTick
    splashTimer.Interval = 7000
    splashTimer.Start()

    SplashScreenForm.ShowDialog()

    Dim uc1 As UserControl1 = New UserControl1
    uc1.ShowDialog()

    End Sub

    Private Sub TimerTick(sender As Object, e As EventArgs)
    splashTimer.Stop()
    SplashScreenLoad.Close()
    End Sub

    End Module



    دوم : اگه پنجره ی WPF رو برای اسپلش اسکرین در نظر بگیریم

    Module Program

    Dim splashTimer As Timer

    Sub Main()
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)

    splashTimer = New Timer()
    AddHandler splashTimer.Tick, AddressOf TimerTick
    splashTimer.Interval = 7000
    splashTimer.Start()

    Dim splash As New SplashScreenForm
    splash.ShowDialog()

    Dim uc1 As UserControl1 = New UserControl1
    uc1.ShowDialog()

    End Sub

    Private Sub TimerTick(sender As Object, e As EventArgs)
    splashTimer.Stop()
    SplashScreenLoad.Close()
    End Sub

    End Module
    آخرین ویرایش به وسیله کاظم فلاحی خواه : چهارشنبه 09 مرداد 1392 در 21:55 عصر

  3. #3

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    ببخشید ولی این که تبدیل win به wpf نیستش
    شما از ابزار mahapps.metro استفاده کردی که خیلی راحت میشه ظاهر فرم رو تغییر داد
    اینم آموزش گام بگامش
    http://mahapps.com/MahApps.Metro/

  4. #4
    کاربر دائمی
    تاریخ عضویت
    دی 1390
    محل زندگی
    رودبارجنوب
    سن
    31
    پست
    171

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    ببخشید ولی این که تبدیل win به wpf نیستش
    شما از ابزار mahapps.metro استفاده کردی که خیلی راحت میشه ظاهر فرم رو تغییر داد
    اینم آموزش گام بگامش
    http://mahapps.com/MahApps.Metro/
    یکمی هم از مغزت استفاده کنی می فهمی من چطور مطالب رو نوشتم شما اصلا مطالب رو به طور کامل خوندید من توی پروژه ای که با وین فرم ایجاد می شه از پنجره ی wpf استفاده کردم تمامی این مطالبی که نوشتم حاصل چند ماه بررسی در تبدیل پروژه های وین فرم به وی پی اف هسته خب برو خودت توی پروژه ی وین فرم یه یوزر کنترل وی پی اف ایجاد کن اونوقت تگ های آغازین و پایانی رو Window یا هر کامپوننت دیگری رو بذاری اینجاست مشکلات پی مشکلات می یان به نظرم تو آدم خیلی ساده انگاری هستی چون مطلبی رو می بینی به عمقش پی نمی بری اینو به عنوان دوستی یکسالمون بهت گفتم تا هر چیزی پست و پایین نبینی ، بخاطر مطالبم ناراحت نشی مهدی جان ; اما
    شما از ابزار mahapps.metro استفاده کردی
    خب وقتی که پروژه تبدیل به وی پی اف شد می شه از هر ابزاری استفاده کرد مثل :
    http://wpftoolkit.codeplex.com
    http://mui.codeplex.com
    http://wpfthemes.codeplex.com
    http://wpfextendeddatagrid.codeplex.com
    http://wpfchromium.codeplex.com
    http://modernuicharts.codeplex.com
    آخرین ویرایش به وسیله کاظم فلاحی خواه : پنج شنبه 10 مرداد 1392 در 09:38 صبح

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1390
    محل زندگی
    رودبارجنوب
    سن
    31
    پست
    171

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    بدلیل وجود مشکل تایپ کردن (بطور کلی رخ ندادن رویداد KeyPress هنگام فشردن دکمه های صفحه کلید) در پنجره های وی پی اف هنگام باز شدن از WinForm (بصورت Show) راه حل زیر رو بهتون پیشنهاد می دم ;

    کد زیر رو به ماژول Program قبل از اجرای فرم اصلی برنامه اضافه کنید


    System.Windows.Forms.Integration.ElementHost.Enabl eModelessKeyboardInterop(form2)'کد اضافه شده

    در کد بالا مشاهده می کنیم فرم 2 درون پرانتز قرار گرفته پس خیالتان راحت باشه ازین به بعد هر وقت فرم 2 رو باز کنید امکان استفاده از صفحه کلید امکان پذیر میشه


    Module Program

    Dim splashTimer As Timer
    Friend form2 As New UC2
    Sub Main()
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)

    splashTimer = New Timer()
    AddHandler splashTimer.Tick, AddressOf TimerTick
    splashTimer.Interval = 7000
    splashTimer.Start()

    SplashScreenForm.ShowDialog()

    Dim uc1 As UserControl1 = New UserControl1
    '==========================================
    System.Windows.Forms.Integration.ElementHost.Enabl eModelessKeyboardInterop(form2)'کد اضافه شده
    '==========================================
    uc1.ShowDialog()

    End Sub

    Private Sub TimerTick(sender As Object, e As EventArgs)
    splashTimer.Stop()
    SplashScreenLoad.Close()
    End Sub

    End Module

  6. #6
    کاربر دائمی آواتار ali.rk
    تاریخ عضویت
    خرداد 1392
    محل زندگی
    مدرسه
    سن
    24
    پست
    128

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    خط
    uc1.ShowDialog()

    ارور می ده چی کیار کنم ؟ :'|

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1390
    محل زندگی
    رودبارجنوب
    سن
    31
    پست
    171

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    میشه سورس پروژه ات رو بفرستی تا بررسی کنم و خطا هاش رو بر طرف کنم،اگه پروژه رو نمی خوای در اختیار دیگران قرار بدی توضیحات کاملی رو بده تا بگم مشکل از کجایه .

  8. #8
    کاربر دائمی آواتار ali.rk
    تاریخ عضویت
    خرداد 1392
    محل زندگی
    مدرسه
    سن
    24
    پست
    128

    نقل قول: تبدیل WinForm به WPF مرجع کامل

    مشکلم حل شد sry

تاپیک های مشابه

  1. مرجع کامل مشخصات- متدها و رویدادهای فاکس پرو
    نوشته شده توسط rezaTavak در بخش Foxpro
    پاسخ: 7
    آخرین پست: یک شنبه 05 اسفند 1397, 21:07 عصر
  2. حرفه ای: چند سایت در مورد تبدیل winform به wpf
    نوشته شده توسط کاظم فلاحی خواه در بخش WPF
    پاسخ: 0
    آخرین پست: شنبه 28 بهمن 1391, 07:08 صبح
  3. سورس برنامه تبدیل تاریخ به همراه راهنمایی کامل
    نوشته شده توسط linux در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 8
    آخرین پست: جمعه 02 اردیبهشت 1384, 11:28 صبح
  4. تبدیل WinForm به WebForm
    نوشته شده توسط M.GhanaatPisheh در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: یک شنبه 21 فروردین 1384, 16:07 عصر
  5. نیاز فوری به یک مرجع کامل macro نویسی در Excel
    نوشته شده توسط ALIreza_nil در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 17 شهریور 1383, 11:01 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •