021-88881776

آموزش توسعه برنامه‌های دسکتاپ در .NET

آموزش .NET یکی از بهترین راه‌ها برای ورود به دنیای برنامه‌نویسی مدرن است، به‌ویژه اگر هدف شما ساخت برنامه‌های کاربردی و جذاب برای دسکتاپ باشد. در این مقاله، به بررسی جامع توسعه برنامه‌های دسکتاپ در .NET می‌پردازیم و شما را از مفاهیم ابتدایی تا ابزارهای پیشرفته همراهی می‌کنیم. فرقی نمی‌کند که تازه‌کار باشید یا تجربه‌ای در برنامه‌نویسی داشته باشید؛ این مقاله با زبانی ساده و مثال‌های عملی به شما کمک می‌کند تا با فناوری‌های مختلف دسکتاپ در .NET آشنا شوید. ما از Windows Forms شروع می‌کنیم، به سراغ WPF می‌رویم و در نهایت به .NET MAUI می‌رسیم که راهکاری برای برنامه‌های چندسکویی است. پس با ما همراه باشید تا قدم‌به‌قدم این مسیر را طی کنیم!

آشنایی با Windows Forms

Windows Forms یا به‌طور خلاصه WinForms، یکی از ابتدایی‌ترین و در عین حال قدرتمندترین ابزارها برای توسعه برنامه‌های دسکتاپ در .NET است. این فناوری از زمان معرفی .NET Framework در سال 2002 توسط مایکروسافت عرضه شد و به دلیل سادگی، سرعت و پایداری‌اش، هنوز هم جایگاه ویژه‌ای در میان توسعه‌دهندگان دارد. WinForms به شما امکان می‌دهد تا با استفاده از یک رابط کاربری گرافیکی (GUI) ساده و کاربردی، برنامه‌هایی بسازید که شامل المان‌هایی مثل دکمه‌ها، جعبه‌های متن، منوها و پنجره‌های تعاملی هستند. اگر تازه وارد دنیای برنامه‌نویسی شده‌اید یا به دنبال راهی سریع برای ساخت برنامه‌های دسکتاپ هستید، WinForms می‌تواند نقطه شروع ایده‌آلی باشد.

تاریخچه و اهمیت WinForms

WinForms در واقع جایگزینی برای فناوری‌های قدیمی‌تر مثل Visual Basic 6 بود. با آمدن .NET Framework، مایکروسافت تصمیم گرفت ابزاری ارائه دهد که هم ساده باشد و هم از قدرت زبان‌هایی مثل C# بهره ببرد. این فناوری در طول سال‌ها به‌روزرسانی‌هایی دریافت کرده و حتی در نسخه‌های جدیدتر .NET (مثل .NET Core و .NET 8) همچنان پشتیبانی می‌شود. این پایداری و سازگاری باعث شده که بسیاری از برنامه‌های قدیمی هنوز هم با WinForms کار کنند و توسعه‌دهندگان جدید نیز به آن علاقه‌مند شوند.

چرا WinForms را انتخاب کنیم؟

WinForms مزایای زیادی دارد که آن را به گزینه‌ای جذاب برای توسعه برنامه‌های دسکتاپ در .NET تبدیل کرده است:

سادگی و راحتی استفاده: یکی از بزرگ‌ترین نقاط قوت WinForms، محیط طراحی بصری آن در ویژوال استودیو است. شما می‌توانید با کشیدن و رها کردن (Drag and Drop) المان‌هایی مثل دکمه، برچسب یا جعبه متن، رابط کاربری خود را بسازید، بدون اینکه نیاز به کدنویسی پیچیده داشته باشید.
سرعت توسعه: اگر نیاز به ساخت یک برنامه ساده مثل یک فرم ورود اطلاعات یا یک ابزار محاسباتی دارید، WinForms به شما اجازه می‌دهد در عرض چند ساعت یا حتی چند دقیقه به نتیجه برسید.
پشتیبانی گسترده: به دلیل قدمت و محبوبیتش، مستندات، کتاب‌ها، آموزش‌ها و انجمن‌های زیادی برای WinForms وجود دارد. این یعنی هر زمان که به مشکلی برخوردید، به‌راحتی می‌توانید راه‌حل پیدا کنید.
سبک و کم‌حجم: برنامه‌های ساخته‌شده با WinForms معمولاً منابع سیستمی کمی مصرف می‌کنند و برای اجرا روی سیستم‌های قدیمی‌تر هم مناسب هستند.

شروع کار با WinForms

برای اینکه درک بهتری از WinForms داشته باشید، بیایید قدم‌به‌قدم با آن آشنا شویم. فرض کنید می‌خواهید یک برنامه ساده بسازید، مثلاً یک فرم ثبت‌نام که نام و نام خانوادگی کاربر را دریافت کند و آن را نمایش دهد.

ایجاد پروژه: در ویژوال استودیو، یک پروژه جدید از نوع “Windows Forms App” انتخاب کنید. بعد از ایجاد پروژه، یک پنجره خالی به نام “Form1” خواهید دید.
طراحی رابط کاربری: از جعبه‌ابزار (Toolbox)، دو جعبه متن (TextBox) برای ورود نام و نام خانوادگی، یک دکمه (Button) برای تأیید و یک برچسب (Label) برای نمایش نتیجه اضافه کنید.
تنظیم ویژگی‌ها: می‌توانید ویژگی‌هایی مثل متن دکمه (مثلاً “ثبت”) یا اندازه المان‌ها را از پنجره Properties تغییر دهید.
نوشتن کد: روی دکمه دوبار کلیک کنید تا رویداد کلیک آن ایجاد شود و کد زیر را بنویسید:

private void button1_Click(object sender, EventArgs e)
{
    string firstName = textBox1.Text;
    string lastName = textBox2.Text;
    label1.Text = $"خوش آمدید، {firstName} {lastName}!";
}

وقتی برنامه را اجرا کنید، با وارد کردن نام و نام خانوادگی و کلیک روی دکمه، پیامی خوش‌آمدگویی در برچسب نمایش داده می‌شود. این مثال ساده نشان می‌دهد که چگونه WinForms رویدادمحور (Event-Driven) عمل می‌کند؛ یعنی شما می‌توانید به اقدامات کاربر (مثل کلیک کردن) واکنش نشان دهید.

مثال عملی پیشرفته‌تر: ماشین‌حساب

برای درک بهتر، بیایید یک ماشین‌حساب ساده بسازیم:

طراحی: چهار دکمه برای اعداد 1 و 2، عملیات جمع و مساوی، و یک جعبه متن برای نمایش نتیجه اضافه کنید.
کد: متغیرهایی برای ذخیره اعداد تعریف کنید و رویدادها را مدیریت کنید:

int num1, num2;
bool isFirstNumber = true;

private void button1_Click(object sender, EventArgs e) // دکمه عدد 1
{
    textBox1.Text += "1";
}

private void button2_Click(object sender, EventArgs e) // دکمه عدد 2
{
    textBox1.Text += "2";
}

private void buttonPlus_Click(object sender, EventArgs e) // دکمه جمع
{
    num1 = int.Parse(textBox1.Text);
    textBox1.Text = "";
    isFirstNumber = false;
}

private void buttonEquals_Click(object sender, EventArgs e) // دکمه مساوی
{
    num2 = int.Parse(textBox1.Text);
    int result = num1 + num2;
    textBox1.Text = result.ToString();
}

این کد یک ماشین‌حساب ابتدایی را پیاده‌سازی می‌کند که می‌توانید آن را با دکمه‌های بیشتر (مثل تفریق یا ضرب) گسترش دهید. برای زیباتر شدن، می‌توانید رنگ پس‌زمینه دکمه‌ها را تغییر دهید یا از آیکون‌ها استفاده کنید.

ابزارها و قابلیت‌های اضافی

کنترل‌ها: WinForms مجموعه‌ای از کنترل‌ها مثل CheckBox، RadioButton، DataGridView و Timer را ارائه می‌دهد که برای ساخت برنامه‌های پیچیده‌تر مثل مدیریت داده‌ها یا تایمرها مفید هستند.
اتصال به پایگاه داده: با استفاده از ADO.NET، می‌توانید به‌راحتی داده‌ها را از یک دیتابیس (مثل SQL Server) بخوانید و در فرم نمایش دهید.
شخصی‌سازی ظاهر: اگرچه WinForms به اندازه WPF انعطاف‌پذیر نیست، اما می‌توانید با تغییر فونت، رنگ و اندازه المان‌ها، ظاهر برنامه را بهبود دهید.

محدودیت‌ها و معایب

با وجود تمام مزایا، WinForms محدودیت‌هایی هم دارد که باید در نظر بگیرید:

طراحی قدیمی: رابط کاربری WinForms گاهی حس قدیمی بودن را منتقل می‌کند و برای برنامه‌های مدرن با گرافیک بالا مناسب نیست.
انعطاف‌پذیری کم: تغییر ظاهر کلی برنامه یا اضافه کردن انیمیشن‌ها در WinForms سخت‌تر از فناوری‌های جدیدتر است.
عملکرد در پروژه‌های بزرگ: برای برنامه‌های پیچیده با تعداد زیادی فرم یا داده، WinForms ممکن است کندتر عمل کند یا مدیریتش سخت شود.
اینجاست که ابزارهای پیشرفته‌تر مثل WPF و .NET MAUI وارد میدان می‌شوند، اما برای یادگیری اولیه و پروژه‌های کوچک، WinForms همچنان یکی از بهترین گزینه‌ها در توسعه برنامه‌های دسکتاپ در .NET است.
WinForms یک نقطه شروع عالی برای هر کسی است که می‌خواهد با توسعه برنامه‌های دسکتاپ در .NET آشنا شود. سادگی، سرعت و پشتیبانی گسترده آن را به ابزاری ایده‌آل برای مبتدیان تبدیل کرده است. با تمرین مثال‌هایی مثل فرم ثبت‌نام یا ماشین‌حساب، می‌توانید به‌سرعت مهارت‌های خود را تقویت کنید و آماده یادگیری فناوری‌های پیشرفته‌تر شوید. در بخش‌های بعدی، به سراغ WPF و .NET MAUI می‌رویم تا ببینیم چگونه می‌توانیم برنامه‌های زیباتر و چندسکویی بسازیم!

معرفی WPF (Windows Presentation Foundation)

Windows Presentation Foundation یا به اختصار WPF، یکی از پیشرفته‌ترین فناوری‌ها برای توسعه برنامه‌های دسکتاپ در .NET است که توسط مایکروسافت در سال 2006 معرفی شد. این ابزار به‌عنوان جایگزینی مدرن برای WinForms طراحی شده و تمرکز آن بر ارائه رابط‌های کاربری حرفه‌ای، زیبا و پویا است. WPF از زبان نشانه‌گذاری XAML (Extensible Application Markup Language) استفاده می‌کند که شباهت‌هایی به HTML دارد و به توسعه‌دهندگان اجازه می‌دهد تا طراحی رابط کاربری را به‌صورت جداگانه از منطق برنامه‌نویسی مدیریت کنند. اگر به دنبال ساخت برنامه‌هایی با گرافیک جذاب، انیمیشن‌های روان و تجربه کاربری سطح بالا هستید، WPF گزینه‌ای است که باید با آن آشنا شوید.

تاریخچه و هدف WPF

WPF با هدف پر کردن شکاف بین برنامه‌های دسکتاپ سنتی و برنامه‌های مدرن معرفی شد. در زمان عرضه، WinForms به‌عنوان ابزاری ساده و کاربردی شناخته می‌شد، اما محدودیت‌هایی در زمینه گرافیک و انعطاف‌پذیری داشت. مایکروسافت با WPF قصد داشت تجربه‌ای مشابه وب و برنامه‌های چندرسانه‌ای را به دسکتاپ بیاورد. این فناوری از همان ابتدا با .NET Framework 3.0 همراه شد و تا امروز در نسخه‌های جدیدتر .NET (مثل .NET 8) به‌روزرسانی‌های متعددی دریافت کرده است. WPF نه‌تنها برای برنامه‌نویسان، بلکه برای طراحان گرافیک نیز جذاب است، زیرا امکان همکاری تیمی بین طراحی و کدنویسی را فراهم می‌کند.

ویژگی‌های کلیدی WPF

WPF مجموعه‌ای از قابلیت‌ها را ارائه می‌دهد که آن را از سایر ابزارهای توسعه برنامه‌های دسکتاپ در .NET متمایز می‌کند:

گرافیک پیشرفته: WPF از DirectX برای رندر گرافیک استفاده می‌کند، به این معنا که می‌توانید انیمیشن‌های پیچیده، جلوه‌های سه‌بعدی، شیب رنگ (Gradient) و تصاویر با وضوح بالا را به برنامه‌های خود اضافه کنید. این ویژگی برای برنامه‌هایی مثل ویرایشگرهای تصویر یا بازی‌های ساده بسیار کاربردی است.
جداسازی طراحی و کد: با استفاده از XAML، طراحان می‌توانند ظاهر برنامه را بدون دخالت در کد C# طراحی کنند. این جداسازی باعث می‌شود که تیم‌های بزرگ‌تر بتوانند به‌صورت موازی کار کنند و تغییرات ظاهری بدون تأثیر روی منطق برنامه اعمال شود.
انعطاف‌پذیری در طراحی: WPF از مفهومی به نام “استایل‌ها و تمپلیت‌ها” پشتیبانی می‌کند که به شما اجازه می‌دهد ظاهر المان‌ها (مثل دکمه‌ها یا پنجره‌ها) را به‌طور کامل تغییر دهید. مثلاً می‌توانید یک دکمه را به شکل دایره یا با افکت شناور طراحی کنید.
پشتیبانی از داده‌ها: WPF قابلیت “Data Binding” را ارائه می‌دهد که اتصال داده‌ها به رابط کاربری را ساده‌تر می‌کند. این ویژگی برای برنامه‌هایی که با دیتابیس کار می‌کنند یا نیاز به نمایش پویای اطلاعات دارند، بسیار مفید است.
پشتیبانی از چندرسانه‌ای: امکان پخش ویدئو، صدا و استفاده از افکت‌های بصری در WPF به‌سادگی فراهم است، چیزی که در WinForms به سختی قابل پیاده‌سازی است.

شروع کار با WPF

برای درک بهتر WPF، بیایید با یک مثال ساده شروع کنیم. فرض کنید می‌خواهید یک برنامه بسازید که یک دکمه با انیمیشن و یک جعبه متن داشته باشد:

ایجاد پروژه: در ویژوال استودیو، یک پروژه از نوع “WPF App” بسازید. پس از ایجاد، دو فایل اصلی خواهید داشت: یک فایل XAML برای طراحی و یک فایل C# برای منطق.
طراحی در XAML: کد زیر را در فایل MainWindow.xaml وارد کنید:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="برنامه من" Height="300" Width="400">
    <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBox x:Name="InputText" Width="200" Margin="0,0,0,10" />
            <Button Content="کلیک کن" Width="100" Height="50">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Width" To="150" Duration="0:0:1" />
                                <DoubleAnimation Storyboard.TargetProperty="Height" To="70" Duration="0:0:1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
        </StackPanel>
    </Grid>
</Window>

افزودن منطق در C#: در فایل MainWindow.xaml.cs، کد زیر را اضافه کنید تا متن واردشده در جعبه متن نمایش داده شود:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show($"شما نوشتید: {InputText.Text}");
}

وقتی این برنامه را اجرا کنید، با کلیک روی دکمه، اندازه آن به‌صورت انیمیشنی تغییر می‌کند و پیامی با متن واردشده نمایش داده می‌شود. این انیمیشن ساده نشان‌دهنده قدرت WPF در خلق تجربه‌های بصری است.

مثال عملی پیشرفته‌تر: فرم ورود

بیایید یک فرم ورود با استایل زیبا بسازیم:

طراحی XAML:

<Window x:Class="WpfApp.LoginWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="ورود" Height="350" Width="400">
    <Grid Background="#F0F0F0">
        <StackPanel Width="250" VerticalAlignment="Center">
            <Label Content="نام کاربری" FontSize="14" />
            <TextBox x:Name="Username" Height="30" Margin="0,0,0,10" />
            <Label Content="رمز عبور" FontSize="14" />
            <PasswordBox x:Name="Password" Height="30" Margin="0,0,0,20" />
            <Button Content="ورود" Height="40" Background="#4CAF50" Foreground="White" Click="Login_Click">
                <Button.Style>
                    <Style TargetType="Button">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="Button">
                                    <Border Background="{TemplateBinding Background}" CornerRadius="5">
                                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Button.Style>
            </Button>
        </StackPanel>
    </Grid>
</Window>

این فرم ورود با دکمه‌ای گرد و رنگ‌بندی جذاب، نشان می‌دهد که چگونه WPF به شما اجازه می‌دهد ظاهر برنامه را شخصی‌سازی کنید.

کد C#:
private void Login_Click(object sender, RoutedEventArgs e)
{
    if (Username.Text == "admin" && Password.Password == "1234")
    {
        MessageBox.Show("ورود موفقیت‌آمیز بود!", "موفقیت");
    }
    else
    {
        MessageBox.Show("نام کاربری یا رمز عبور اشتباه است.", "خطا");
    }
}

مقایسه با WinForms

برای درک بهتر جایگاه WPF در توسعه برنامه‌های دسکتاپ در .NET، بیایید آن را با WinForms مقایسه کنیم:

سادگی در مقابل قدرت: WinForms مثل یک دوچرخه است؛ ساده، سریع و مناسب برای مسیرهای کوتاه. اما WPF مثل یک خودروی مدرن است که امکانات بیشتری دارد، ولی برای تسلط بر آن باید زمان بیشتری صرف کنید.
گرافیک و انیمیشن: WinForms در زمینه گرافیک محدود است، اما WPF با پشتیبانی از DirectX، تجربه‌ای نزدیک به برنامه‌های وب یا بازی‌ها ارائه می‌دهد.
منحنی یادگیری: WinForms برای مبتدیان ساده‌تر است، در حالی که WPF نیاز به یادگیری XAML و مفاهیم پیشرفته‌تر مثل Data Binding دارد.
کاربرد: WinForms برای ابزارهای کوچک و ساده مناسب است، اما WPF برای برنامه‌های تجاری بزرگ، داشبوردهای مدیریتی یا اپلیکیشن‌های چندرسانه‌ای ایده‌آل است.

محدودیت‌ها و نکات

WPF با تمام مزایایش، بدون نقص نیست:

مصرف منابع: به دلیل استفاده از DirectX، برنامه‌های WPF ممکن است روی سیستم‌های قدیمی‌تر کندتر اجرا شوند.
پیچیدگی اولیه: برای کسانی که تازه شروع کرده‌اند، یادگیری XAML و ساختار WPF ممکن است کمی چالش‌برانگیز باشد.
اندازه پروژه: برای برنامه‌های خیلی کوچک، استفاده از WPF ممکن است بیش از حد پیچیده به نظر برسد.

WPF یک ابزار قدرتمند و مدرن برای توسعه برنامه‌های دسکتاپ در .NET است که به شما اجازه می‌دهد برنامه‌هایی با رابط کاربری جذاب و حرفه‌ای بسازید. از انیمیشن‌های ساده گرفته تا فرم‌های پیچیده، WPF انعطاف‌پذیری بی‌نظیری ارائه می‌دهد. اگر آماده‌اید که از سادگی WinForms فراتر بروید و به دنیای طراحی‌های پیشرفته‌تر قدم بگذارید، WPF بهترین انتخاب است. در بخش بعدی، با .NET MAUI آشنا می‌شویم که این قابلیت‌ها را به پلتفرم‌های دیگر گسترش می‌دهد!

ایجاد برنامه‌های چندسکویی با .NET MAUI

حالا که با ابزارهای سنتی مثل WinForms و WPF در دنیای توسعه برنامه‌های دسکتاپ در .NET آشنا شده‌ایم، نوبت به بررسی یک فناوری انقلابی به نام .NET MAUI رسیده است. .NET MAUI (که مخفف Multi-platform App UI است) جدیدترین ابتکار مایکروسافت برای توسعه برنامه‌هایی است که نه‌تنها روی دسکتاپ (مثل ویندوز و macOS) اجرا می‌شوند، بلکه قابلیت اجرا روی پلتفرم‌های موبایل (اندروید و iOS) را نیز دارند. این ابزار در سال 2022 به‌طور رسمی معرفی شد و هدفش این است که توسعه‌دهندگان بتوانند با یک کد واحد، برنامه‌هایی بسازند که روی چندین سیستم‌عامل کار کنند. اگر به دنبال راهی هستید که برنامه‌هایتان را از دسکتاپ به دنیای موبایل گسترش دهید، .NET MAUI همان چیزی است که باید بشناسید.

تاریخچه و تکامل .NET MAUI

.NET MAUI در واقع تکامل‌یافته‌ی فناوری Xamarin.Forms است که مایکروسافت در سال 2016 با خرید Xamarin به مجموعه ابزارهای خود اضافه کرد. Xamarin.Forms به توسعه‌دهندگان اجازه می‌داد برنامه‌های چندسکویی بسازند، اما محدودیت‌هایی مثل عملکرد و یکپارچگی با .NET داشت. با معرفی .NET MAUI، مایکروسافت این ابزار را با .NET 6 و سپس .NET 8 ادغام کرد تا تجربه‌ای یکپارچه‌تر، سریع‌تر و مدرن‌تر ارائه دهد. این فناوری نه‌تنها برای توسعه برنامه‌های دسکتاپ در .NET بلکه برای ساخت اپلیکیشن‌های جامع چندسکویی طراحی شده است.

چرا .NET MAUI را انتخاب کنیم؟

.NET MAUI ویژگی‌هایی دارد که آن را به گزینه‌ای جذاب برای توسعه‌دهندگان تبدیل می‌کند:

یک کد، چند پلتفرم: بزرگ‌ترین مزیت .NET MAUI این است که می‌توانید یک بار کد بنویسید و آن را روی ویندوز، macOS، اندروید و iOS اجرا کنید. این یعنی دیگر نیازی به نوشتن کد جداگانه برای هر پلتفرم ندارید و در زمان و هزینه صرفه‌جویی می‌شود.
عملکرد بالا: .NET MAUI از قدرت .NET 8 بهره می‌برد که بهینه‌سازی‌هایی برای سرعت و کارایی دارد. این فناوری با استفاده از کامپایلرهای بومی (Native Compilation) برنامه‌هایی سریع‌تر از Xamarin.Forms تولید می‌کند.
رابط کاربری مدرن: مانند WPF، از XAML برای طراحی رابط کاربری استفاده می‌کند، اما این XAML برای همه پلتفرم‌ها بهینه شده است. شما می‌توانید رابط‌هایی بسازید که هم زیبا باشند و هم با هر دستگاه سازگار شوند.
ابزارهای توسعه یکپارچه: با استفاده از ویژوال استودیو، می‌توانید به‌صورت همزمان برنامه را برای پلتفرم‌های مختلف تست کنید و از دیباگرهای قدرتمند آن بهره ببرید.
انعطاف‌پذیری: .NET MAUI به شما اجازه می‌دهد که بخش‌هایی از کد را برای یک پلتفرم خاص (مثلاً فقط اندروید) سفارشی کنید، در حالی که بقیه کدها مشترک باقی می‌مانند.

شروع کار با .NET MAUI

برای اینکه ببینید .NET MAUI چگونه کار می‌کند، بیایید یک پروژه ساده بسازیم. فرض کنید می‌خواهید یک برنامه مدیریت وظایف (To-Do List) ایجاد کنید که روی همه پلتفرم‌ها کار کند.

ایجاد پروژه: در ویژوال استودیو، یک پروژه از نوع “.NET MAUI App” انتخاب کنید. بعد از ایجاد، یک فایل XAML و یک فایل C# برای صفحه اصلی خواهید داشت.
طراحی رابط کاربری: در فایل MainPage.xaml، کد زیر را وارد کنید:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MauiApp.MainPage">
    <StackLayout Padding="20">
        <Entry x:Name="TaskEntry" Placeholder="وظیفه جدید را وارد کنید" />
        <Button Text="اضافه کن" Clicked="OnAddClicked" Margin="0,10,0,0" />
        <CollectionView x:Name="TaskList">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Label Text="{Binding .}" FontSize="16" />
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>
</ContentPage>

منطق در C#: در فایل MainPage.xaml.cs، کد زیر را بنویسید:

public partial class MainPage : ContentPage
{
    private List<string> tasks = new List<string>();

    public MainPage()
    {
        InitializeComponent();
        TaskList.ItemsSource = tasks;
    }

    private void OnAddClicked(object sender, EventArgs e)
    {
        if (!string.IsNullOrWhiteSpace(TaskEntry.Text))
        {
            tasks.Add(TaskEntry.Text);
            TaskList.ItemsSource = null; // رفرش لیست
            TaskList.ItemsSource = tasks;
            TaskEntry.Text = ""; // پاک کردن ورودی
        }
    }
}

این برنامه به شما اجازه می‌دهد وظایف را وارد کنید و آن‌ها را در یک لیست ببینید. وقتی آن را اجرا کنید، می‌توانید نتیجه را روی ویندوز، macOS یا حتی شبیه‌ساز اندروید و iOS تست کنید. این سادگی و قابلیت چندسکویی، قدرت .NET MAUI را نشان می‌دهد.

مثال عملی پیشرفته‌تر: برنامه یادداشت‌برداری با ذخیره‌سازی

بیایید مثال یادداشت‌برداری را گسترش دهیم تا یادداشت‌ها در یک فایل ذخیره شوند و ظاهر بهتری داشته باشند:

طراحی XAML:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MauiApp.NotePage">
    <StackLayout Padding="20" BackgroundColor="#F5F5F5">
        <Entry x:Name="NoteEntry" Placeholder="یادداشت خود را وارد کنید" 
               HeightRequest="100" BackgroundColor="White" />
        <Button Text="ذخیره" Clicked="OnSaveClicked" 
                BackgroundColor="#2196F3" TextColor="White" CornerRadius="10" 
                Margin="0,10,0,0" />
        <Label x:Name="StatusLabel" Text="وضعیت: آماده" FontSize="14" />
    </StackLayout>
</ContentPage>

کد C#:

public partial class NotePage : ContentPage
{
    private string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "note.txt");

    public NotePage()
    {
        InitializeComponent();
        if (File.Exists(filePath))
        {
            NoteEntry.Text = File.ReadAllText(filePath);
        }
    }

    private async void OnSaveClicked(object sender, EventArgs e)
    {
        File.WriteAllText(filePath, NoteEntry.Text);
        StatusLabel.Text = "وضعیت: ذخیره شد";
        await DisplayAlert("موفقیت", "یادداشت ذخیره شد!", "باشه");
    }
}

این برنامه یادداشت‌ها را در یک فایل محلی ذخیره می‌کند و با طراحی زیبا، روی همه پلتفرم‌ها به‌خوبی کار می‌کند. استفاده از async/await هم نشان‌دهنده سازگاری .NET MAUI با الگوهای مدرن برنامه‌نویسی است.

قابلیت‌های اضافی .NET MAUI

دسترسی به APIهای بومی: می‌توانید به قابلیت‌های خاص هر پلتفرم (مثل دوربین در اندروید یا نوتیفیکیشن در iOS) دسترسی پیدا کنید.
شخصی‌سازی رابط: با استفاده از “Handlers”، می‌توانید رفتار کنترل‌ها را برای هر پلتفرم تغییر دهید (مثلاً دکمه‌ای که در iOS گرد و در اندروید مربعی باشد).
پشتیبانی از MVVM : .NET MAUI به‌طور کامل از الگوی Model-View-ViewModel پشتیبانی می‌کند که برای پروژه‌های بزرگ و تیمی بسیار مناسب است.

چالش‌ها و محدودیت‌ها

با وجود تمام مزایا، .NET MAUI هنوز در مراحل اولیه توسعه است و مشکلاتی دارد:

باک‌ها و ناپایداری: چون فناوری جدیدی است، ممکن است با باگ‌هایی مواجه شوید یا برخی قابلیت‌ها هنوز کامل نباشند.
منحنی یادگیری: اگر با Xamarin یا WPF آشنا نباشید، یادگیری ساختار چندسکویی و مدیریت تفاوت‌های پلتفرم‌ها کمی زمان‌بر است.
پشتیبانی محدود در ابزارها: ابزارهای تست و دیباگ برای همه پلتفرم‌ها هنوز به اندازه ابزارهای سنتی .NET توسعه نیافته‌اند.

مقایسه با WPF و WinForms

WinForms: ساده و محدود به ویندوز، در حالی که .NET MAUI چندسکویی است.
WPF: قدرتمند و گرافیکی، اما فقط برای دسکتاپ (عمدتاً ویندوز). .NET MAUI قابلیت‌های WPF را به پلتفرم‌های دیگر گسترش می‌دهد.
کاربرد: اگر فقط به دسکتاپ ویندوز نیاز دارید، WinForms یا WPF کافی است؛ اما برای برنامه‌های چندسکویی، .NET MAUI بهترین انتخاب است.

.NET MAUI آینده توسعه برنامه‌های دسکتاپ در .NET و فراتر از آن است. این ابزار با ارائه یک کد مشترک برای چندین پلتفرم، کار توسعه‌دهندگان را ساده‌تر کرده و به آن‌ها اجازه می‌دهد برنامه‌هایی مدرن و کارآمد بسازند. از برنامه‌های ساده مثل یادداشت‌برداری تا اپلیکیشن‌های پیچیده‌تر، .NET MAUI انعطاف‌پذیری و قدرتی بی‌نظیر دارد. با وجود چالش‌های فعلی، این فناوری پتانسیل تبدیل شدن به标准 اصلی توسعه چندسکویی را دارد.

نتیجه‌گیری

توسعه برنامه‌های دسکتاپ در .NET دنیایی گسترده و متنوع است که ابزارهایی مثل Windows Forms، WPF و .NET MAUI را در اختیار شما قرار می‌دهد. اگر تازه‌کار هستید، با WinForms شروع کنید تا با مفاهیم اولیه آشنا شوید. برای برنامه‌های حرفه‌ای‌تر و زیبا، WPF را امتحان کنید و اگر به دنبال آینده‌ای چندسکویی هستید، .NET MAUI بهترین انتخاب است. هر کدام از این ابزارها نقاط قوت خود را دارند و بسته به نیاز پروژه‌تان می‌توانید یکی را انتخاب کنید. حالا که با این فناوری‌ها آشنا شدید، وقت آن است که دست به کار شوید و اولین برنامه دسکتاپ خود را بسازید!

آموزش توسعه برنامه‌های دسکتاپ در .NET

دیدگاه های شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *