>> Learning WPF Full <<

 
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

>> Learning WPF Full <<

« به نام خدا »

مقدماتی درباره WPF : 

WPF یک تکنولوژی جدید ساخت و اجرای اینترفیس در برنامه های جدید ویندوز است که اولین بار با .net فریم ورک 3.5 و در ویندوز ویستا ارائه شد. اما حالا با نسخه 4 خود و به کمک ویندوز 7، آمده تا بازی را عوض کند. همين حالا هم نرم افزار هايي نظير فایرفاکس 4، اینترنت اکسپلورر 9 و ... از WPF براي ساخت اينترفيس هایشان استفاده مي نمایند. پس اگر شما هم به عنوان یک "توسعه دهنده" یا یک "کاربر علاقه مند به دانستن مبانی تکنولوژی های مختلف"؛ دوست دارید که به طور کاملی با قابلیت ها و امکانات مختلف WPF آشنا شوید؛ این مطلب مناسب شماست. پس آن را از دست ندهید. البته قبل از شروع به خواندن مطلب، توصیه می کنیم که مطلب بررسی دایرکت ایکس 11 را مطالعه کنید. چرا که به درک هر چه بهتر شما از این مقاله کمک خواهد کرد. البته فراموش نکنید که این یک مقاله تخصصی است.


اگر چه ویندوز فرم یک ابزار بزرگ و پرقابلیت است، تغییرات ضروری ای را که باید در سیستم ارتباط با سخت افزار خود اعمال می کرد؛ اعمال نکرده است و به طور کلی می توان آن را ابزاری دانست که در طی ده سال گذشته، دستخوش تغییر اساسی خاصی نشده. ویندوز فرم برای ساختن یک ظاهر بصری و یا استفاده از عناصر استاندارد رابط کاربری ویندوز – مانند : Button , Textbox , Checkbox – به طور قابل ملاحظه ای، متکی به API های کلاسیک ویندوز است. همین مساله در عمل باعث می شود که سفارشی سازی به طور بسیار ناقصی در اجزای رابط کاربری اعمال گردد. به طور کلی ویندوز فرم نمی تواند قابلیت های ترسیمی مدرن و پیشرفته را در اختیار شما قرار دهد و به محض این که کمی آن را از نظر عناصر گرافیکی غنی کنید؛ آنچنان کند و سنگین می شود که از کارتان منصرف می گردید.


اما حالا WPF یا Windows Presentation Foundation آمده تا همه چیز را عوض کند. مدلی که WPF برای مدیریت منابع سیستم و اجزای رابط کاربری از آن تبعیت می کند؛ کاملا با ویندوز فرم متفاوت است. در همین حال WPF شامل کنترل های استانداردی است که در ویندوز فرم هم دیده می شدند. پس علاوه بر امکانات قبلی، توسعه دهندگان می توانند به قابلیت های ترسیمی کاملا مدرن با استفاده از دایرکت ایکس دست پیدا کنند و به طور کلی یک ظاهر کاملا مدرن را برای برنامه های خود بسازند. نکته دیگر این است که در WPF، زیبایی در عین سرعت به کار برده شده است.

پایه و اساس WPF، زیر بنا و ساختار قدرتمندی است که بر اساس DirectX ساخته شده. API های شتاب دهنده گرافیک سخت افزاری که در بازی های کامپپیوتری هم استفاده گسترده ای دارد. معنی اش آن است که شما می توانید از افکت های گرافیکی غنی ای استفاده کنید. بدون آن که نگران کاهش عملکرد و فشار آمدن زیاد به پردازنده شوید. چرا که تمام این افکت ها روی پردازنده گرافیکی پردازش می شوند و GPU ها هم به دلیل معماری موازی در ساختارشان؛ بسیار سریع تر از پردازنده ها به شمار می روند. این همان نقطه ضعف بزرگ ویندوز فرم در برابر WPF می باشد.

در واقع شما می توانید حتی از قابلیت های پیشرفته تری هم استفاده کنید. مانند پشتیبانی از فایل های ویدئویی و محتوای سه بعدی! با استفاده از این قابلیت ها (و یک ابزار خوب برای طراحی) قادر خواهید بود که رابط های کاربری و افکت های بصری بسیار چشم نوازی بسازید. در حالی که هیچ کدام از این کار ها برای ویندوز فرم ممکن نبود.



در این میان، ویدئو ها – انیمیشن ها و امکانات 3 بعدی، توجه بیشتری را در WPF می طلبند. این مهم است که در یاد داشته باشید که شما می توانید از WPF برای ساخت ویندوز اپلیکیشن های عادی با کنترل های استاندارد و افکت های پیش فرض استفاده کنید. در واقع استفاده از کنترل های متداول ویندوز، به همان سادگی ویندوز فرم است. حتی بهتر از این، باید بدانید که WPF برای برنامه های تجاری، سازگاری بیشتری نسبت به ویندوز فرم دارد. یک سری از کلاس های مختلف هم برای محتوای پرینت شده و مدیریت صف های پرینت به وجود آمده اند که بسیار بهتر از نمونه های مشابه در ویندوز فرم هستند. در نهایت هم به امکانات جدیدی می رسیم که در پرونده ها به کار گرفته می شود و به وسیله این امکانات می توانید مقدارهای بزرگی از متن های با فرمت های مختلف را نمایش دهید. برنامه های کاربردی مبتنی بر وب هم، در WPF فضای باز تری برای زندگی دارند. اپلیکیشن های صفحه ای می توانند به طور یک پارچه با Intenet Exploler هماهنگ شوند و یا از یک وب سایت به طور مستقیم اجرا شوند. همه این ها بدون هشدار های امنیتی متداول و آزار دهنده؛ و در عین حال با امنیت کامل اجرا خواهند شد! البته امکان اجرای آن ها روی نسخه های جدید فایر فاکس هم محیاست.


- مواد لازم برای استفاده از WPF

حالا باید به این سوال پاسخ دهیم که برای استفاده از WPF و همچنین توسعه دادن اپلیکیشن ها بر مبنای آن، به چه چیز هایی نیاز داریم؟ برای اجرای یک برنامه ی WPF، کامپیوتر شما باید مجهز به یکی از نسخه های ویندوز 7، ویستا یا XP Service Pack 2 باشد. همچنین به نسخه چهارم فریم ورک دات نت هم نیاز دارید. برای ساخت یک اپلیکیشن WPF 4 به نرم افزار Visual Studio 2010 نیاز دارید که .NET Framework 4 را هم داشته باشد.


یک گزینه دیگر برای شما این است که به جای استفاده از Visual Studio، از نرم افزار Expression Blend استفاده کنید که یک ابزار طراحی گرافیک محور می باشد. کاربرد این نرم افزار در ساخت و تست اپلیکیشن های WPF می باشد. به طور کلی، این نرم افزار برای طراحان گرافیکی ای در نظر گرفته شده که دوست دارند وقتشان را به درست کردن رابط های چشم نواز و جدی بگذرانند. اما ویژوال استودیو بیشتر برای برنامه نویس هایی مناسب است که می خواهد برنامه هایی با کد نویسی زیاد تولید کنند. این مقاله پیشفرض را بر این قرار داده که از ویژوال استودیو استفاده می نمایید. اما اگر دوست دارید که چیز های بیشتری در مورد Expression Blend یاد بگیرید، می توانید به عناوینی در همان زمینه که خوشبختانه کم هم نیستند؛ مراجعه فرمایید.


- سیر تکاملی گرافیک در ویندوز:

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


بدون این که بدانیم، توسعه دهنده های ویندوز بیش از 15 سال بود که از یک تکنولوژی تقریبا ثابت برای برنامه های خود بهره می بردند، سخت است که بتوانیم از WPF قدر دانی کنیم. اپلیکیشن های استاندارد ویندوز، برای ساختن رابط کاربری خود متکی به دو قطعه ناقص و پیش پا افتاده از سیستم عامل ویندوز بودند. البته از 10 سال پیش تغییرات نسبتا خوبی در ویندوز فرم انجام شد، اما نمی توان آن ها را اساسی دانست.


• User32: این تکنولوژی همان ظاهر آشنای ویندوز را برای عناصری نظیر پنجره ها، دکمه ها، جعبه متن ها و... پدید می آورد. 

• GDI/GDI+: این تکنولوژی از قابلیت های ترسیم و رندر سازی: اجسام، متن ها و تصاویر و ... پشتیبانی می کرد. بهای استفاده از آن پیچیدگی زیاد و کارایی ضعیف در برنامه ها بود.


در طول چند سال، هر دوی این تکنولوژی ها تصفیه شدند و API هایی که توسعه دهنده ها از آن ها برای تعامل با کاربر استفاده می کردند؛ به طرز چشمگیری تغییر نمودند. اما هنوز هم وقتی با چهارچوب دات نت و ویندوز فرم یا Visual Basic 6 یا کد های C++ مبتنی بر MFC کار می کردید؛ در پشت صحنه همان بخش های مذکور از سیستم عامل به کار گرفته می شدند. فریم ورک های جدید تر، پوشش بهتری را برای تعامل با User 32 و GDI/GDI+ عرضه کردند. این فریم ورک ها توانستند عملکرد و اثر کار را بهبود ببخشند و پیچیدگی کار را کاهش دهند. قابلیت های نمایش پیش از رندر (یا پیش از کامپایل) برنامه ها بهبود یافت و برای بسیاری از کار ها دیگر نیازی به کد نویسی نبود. اما مشکل بزرگتری وجود داشت. این فریم ورک ها هیچ وقت نمی توانستند محدودیت های اساسی کامپوننت های سیستم را که بیش از یک دهه پیش طراحی شده بودند؛ از بین ببرند.


- دایرکت ایکس: موتور گرافیکی جدید

مایکروسافت یک راه دیگر برای از بین بردن محدودیت های User 32 و GDI/GDI+ ارائه داد و آن چیزی نبود جز Direct X. دایرکت ایکس در ابتدا تبدیل به یک ابزار برای ساخت بازی ها روی پلتفرم ویندوز گردید. اولین تعهد دایرکت ایکس، سرعت بالا بود و به همین دلیل مایکروسافت همکاری های نزدیکی را با سازندگان کارت های گرافیک ترتیب داد تا بتواند شتاب دهنده سخت افزاری لازم را برای دایرکت ایکس به ارمغان آورد. چراکه یک شتاب دهنده سخت افزاری برای پردازش بافت های پیچیده، جلوه های ویژه و گرافیک های سه بعدی لازم و حیاتی بود.


بعد از چند سال از اولین معرفی دایرکت ایکس( که کمی بعد از عرضه ویندوز 95 اتفاق افتاد)، دایرکت ایکس تبدیل به یک پلتفرم بزرگ و عمده شد و حالا این فناوری تبدیل به یک بخش بزرگ از ویندوز شده است که می تواند تمام کارت های گرافیک مدرن را پشتیبانی کند. با تمام این ها API برنامه نویسی برای دایرکت ایکس، بیشتر برای توسعه دهنده های بازی مناسب بودو نه نرم افزار ها. به همین دلیل دایرکت ایکس هیچ وقت در اینترفیس برنامه های عمده و قدیمی تجاری مورد استفاده قرار نگرفت. (به جز برنامه های سه بعدی خاصی مانند 3ds Max و ...)


WPF تمام این ها را تغییر می دهد. در WPF زیربنای تکنولوژی گرافیکی، GDI/GDI+ نیست. به جای آن دایرکت ایکس به کار گرفته شده است. شایان ذکر است که در اپلیکیشن های دبلیو.پی.اف، مهم نیست می خواهید چه نوع رابط کاربری ای را ایجاد نمایید. در هر حال شما با دایرکت ایکس کار خواهید کرد! پس چه به طراحی های پیچیده سه بعدی مشغول باشید و چه به اختصاصی کردن دکمه ها و عوض کردن رنگ متن و ...، تمام کار های ترسیمی به دایرکت ایکس محول خواهند شد. در عمل، حتی اپلیکیشن های جهانی و تجاری هم می توانند از جلوه های غنی مانند شفافیت یا فیلتر های AA (Anti Aliasing) استفاده نمایند و بهره مند شدن از شتاب دهنده ی سخت افزاری هم که جای خود را دارد! به طور ساده می توانیم بگوییم که دایرکت ایکس تا هرچقدر که بتواند، سعی می کند عملیات پردازشی را با واحد پردازش گرافیکی (GPU) هماهنگ نماید. این کار علاوه بر آزاد کردن پردازنده برای کار های محاسباتی بیشتر و بهره برداری بهتر از منابع سیستمی، عملکردی خارق العاده در گرافیک نسبت به GDI/GDI+ نصیب شما می کند. چرا که کارت های گرافیک بسیار بسیار قوی تر از پردازنده ها هستند. ( به گفته خود اینتل: حدودا 14 برابر)


خوب است بدانید که دایرکت ایکس موثر ترین ای.پی.آی در پردازش گرافیکی است. چرا که عناصر سطح بالایی مانند تکسچر ها و Gradient را در بر می گیرد و به طور مستقیم روی کارت گرافیک پردازششان می کند. در حالی که GDI از این کار عاجز است. به همین دلیل GDI باید آن ها را به دستور العمل های پیکسل به پیکسل تبدیل کند که در کارت گرافیک های مدرن به صورت بسیار کندی مورد پردازش و رندر سازی قرار می گیرند.


اما یکی از کامپوننت هایی که همچنان در صحنه حضور دارد و فعالیت می کند(البته به طور محدود) User 32 می باشد. WPF هنوز هم برای برخی از سرویس ها متکی به این کامپوننت می باشد. کار هایی مانند اداره و مسیر یابی ورودی ها و طبقه بندی مکان اپلیکیشن ها و پنجره ها، از مواردی هستند که بدون User 32 قابل انجام نمی باشند.


- شتاب دهی سخت افزاری و WPF:

شما حتما می دانید که کارت های گرافیک در ویژگی های تخصصی رندر سازی و بهینه سازی با هم تفاوت بسیاری دارند. اما خوشبختانه، این برای WPF مشکلی به حساب نمی آید. چرا که WPF تقریبا همه ی کار ها را با تکیه بر محاسبات نرم افزاری و رابط های برنامه کاربردی (APIs) انجام می دهد. به همین دلیل نیازی نیست که به پشتیبانی داخلی از کارت گرافیک تکیه نماید.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:00 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

با سلام خدمت دوستان 
 
در پست های قبلی با توضیحات دوست عزیزمون (#include<security.h>) به بیان مقدمات wpf و آشنایی با این تکنولوژی آشنا شدید.
 
در این پست میخوام یه پروژه رو در ویژوال استودیو بسازم و یک برنامه کوچیک با عنوان (Hello world) ایجاد و اجرا کنم.
 
خب ابتدا ویژوال استودیو رو باز کنید و و از منوی File بر روی گزینه NEW و Project را کلیک کنید.WPF Application را بعنوان پروژه خود انتخاب کنید.
 
 
 
سپس پوشه ای را برای پروژه خود انتخاب کرده و نامی برای آن انتخاب کنید و در نهایت بر روی کلید OK کیک نمایید
 
با این کار ویژوال استدیو پروژه ای را برای شما ایجاد کرده و بطور خود کار فایل هایی را به Solution برنامه اضافه می کند.
 
اگر با WinForm کار کرده باشید متوجه می شوید که ساختار پروژه بسیار شبیه به آن است بجز اینکه در اینجا دیگر خبری از فایل Window1.designer.cs نیست و بجای آن فایلی به نام MainWindow.xaml اضافه شده است.
 
 
 
حالا فایل MainWindow.xaml را در ویژوال استودیو باز کنید و از جعبه ابزار (toolbox) یک TextBox به پنجره برنامه اضافه کنید.
 
این کار را می توانید با دراگ کردن این کنترل ها و یا دوبار کلیک بر روی آنها انجام دهید.
 
خب حالا در قسمت design پنجره فرمتون در xaml در پایین صفحه کد زیرو تایپ کنید.
 
کد:
Text="Hello world"
 
 
در هر قسمتی کد رو تایپ کردید موردی نداره فقط بعد از یک خاصیت کنترلتون کد رو بنویسید
 
 
 
حالا برنامه رو اجرا کنید تا نتیجه رو ببینید

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:01 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

چاپ hello WPF از طریق کدنویسی سی شارپ و تنظیم رنگ پس زمینه
در پست قبلی یاد گرفتید که به چه شکل با استفاده از کدهای XAML یک متن رو در یک کنترل نمایش بدید 
 
در این پست بتون یاد میدم که چطوری با کدنویسی در سی شارپ متنی رو در کادر نمایش بدید 
 
خب یه پروژه wpf ایجاد کنید و نامی رو براش انتخاب کنید و سپس در حالت design فرمتون روی فرم مورد نظر کلیک راست کنید و در پنجرۀ تنظیمات background فرمتون رو به رنگی دلخواه تظیم کنید و پروژه رو save کنید 
 
 
 
 
 
حالا رنگو ست کردیم بعد از اون از منوی toolbox یک کنترل button و یک textbox روی فرمتون قرار بدید و سپس پروژه رو مجددا save کنید و بعد از اون یکبار پروژه تونو build کنید با فشردن کلید F6 این کارو میتونید انجام بدید.
 
خب حالا روی Button دوبار کلیک کنید تا رویداد Click آن براتون باز بشه و وارد محیط کدنویسی بشید
 
سپس مانند کدنویسی که در پروژه های عادی خودتون انجام می دید به همین شکل کد زیرو در رویداد ذکر شد تایپ کنید البته کدنویسی سی شارپ به همین چند متد ختم نمیشه ودر اینگونه پروژه ها تکنیک های بسیاری وجود داره که در پست های بعدی اشاره خواهم کرد
 
 
کد:
      private void button1_Click(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "hello WPF";
        }
 
 
خب حالا پروژتونو اجرا کنید تا تغییراتو ببینید 
 
 
 
دقت کنید تفاوتی که در پروژه های wpf وجود داره اینه که شما میتونید از طریق کدنویسی XAML رنگ ها و حتی کنترل ها رو هم کدنویسی کنید بدون انتخاب کردن از toolbox
تمامی طراحی روی فرم ما کدش به شکل زیر خواهد بود در پست های بعدی به تفکیک هرکدوم رو توضیح خواهم داد
 
کد:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Content="Button" Height="22" HorizontalAlignment="Left" Margin="137,105,0,0" Name="button1" VerticalAlignment="Top" Width="120" Click="button1_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="137,57,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
        <Grid.Background>
            <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                <GradientStop Color="Black" Offset="0" />
                <GradientStop Color="#FFBE5A5A" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
</Window>

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 جداسازی رفتار برنامه از ظاهر آن
مهمترین ویژگی WPF اینه که منطق و رفتار های برنامه را از ظاهر آن مجزا می کنه این جداسازی به این صورت انجام میشه که ظاهر برنامه بوسیله یک زبان نشانه گذاری بنام XAML تعریف میشه، در حالی که رفتارشون توسط زبان های مدیریت شده (managed programming language) مانند #C یا Visual Basic تعریف میشه. حالا ارتباط این دو بخش، یعنی ظاهر و منطق، از طریق عناصر مختلفی از جمله انقیاد داده (databinding)، رویداد ها (events) و نیز فرمان ها (commands) بر قرار می گردد.
 
جداسازی منطق و ظاهر برنامه مزیت هایی دارد که اونا رو را براتون توضیح میدم :
 
1. ارتباط بین رفتار برنامه و ظاهر آن سست می شود.
 
2. امکان کار تیمی بین طراحان و برنامه نویسان فراهم می گردد.
 
3. ابزار های گرافیکی طراحی این امکان را پیدا می کنند که بجای پیمایش (parse) کدهای برنامه، با اسناد ساده XAML کار کنند.
 
در پست های بعدی از ترکیب شدن کنترل ها در wpf بیشتر توضیح میدم تا درکش راحتر بشه
 
مستقل بودن از Resolution:
 
نکته قابل توجهی که در WPF وجود داره اینه که تمامی اندازه ها در آن واحد های منطقی هستند، نه پیکسل. یک واحد منطقی برابر با 1.96 یک اینچ است. بر اساس همین قابلیت اگه رزولوشن صفحه نمایش خودتونو افزایش بدید، اندازه واسط کاربر تغییری نمی کند، فقط کمی دندانه دندانه می شود. از آنجایی که WPF بر اساس موتور رندر برداری (vector rendering engine) ساخته شده است به شما این اجازه را میده که به راحتی واسط های کاربری مقیاس پذیری را ایجاد کنید که این ویژگی خیلی پر کاربرد هست.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 ترکیب کنترل ها و قابلیت شخصی سازی بالا
یکی از ویژگی های متمایز کننده WPF اینه که می تونید هرنوعی از کنترول های موجود رو بعنوان محتوا (content) کنترول دیگر تعریف کنید. هرچند که این ویژگی برای طراحان کمی ترسناک بنظر میاد اما در صورت استفاده بجا و صحیح آن قدرت فراوانی را به شما می دهد. 
مثلا شما می توانید تصویری را در داخل یک کلید قرار دهید تا یک کلید تصویری ایجاد نمایید ، و یا لیستی از ویدئوها را در داخل یک کومبو باکس نمایش بدید تا کاربر بتونه ویدئویی را انتخاب کنه.
 
مزیت های جداسازی منطق از ظاهر برنامه اینه که برنامه نویس میتونه بدون هیچ نگرانی از ایجاد اشکال در صحت و درستی برنامه ظاهر کنترول هاش رو تغییر بده. درWPF مفهومی به نام Style وجود دارد که به شما این امکان را می دهد تا متل CSS در HTML ، به کنترول های برنامه خودتون ظاهر و شکل بدید .در کنار Style، مفهومی دیگه ای بنام Template قرارداره که امکان تعریف ظاهر یک کنترول را فراهم میاره.
 
بطور خلاصه می تونیم بگیم WPF نسل جدید فریم ورک UI شرکت ماکروسافت ست که برای ساخت برنامه هایی با واسط های کاربری بسیار قدرتمند مورد استفاده قرار می گیرد. از زمان معرفی NET Framework 3.0، WPF. دیگه جزئی از فریم ورک net. شده که در اختیار برنامه نویسان و کاربران قرار گرفته است.
 
در پست های بعدی با کدنویسی به مفهوم بالا پی خواهید برد

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 معماری wpf
در پست های قبلی با ساختن یک برنامه در wpf و نمایش یک متن ساده آشنا شدید، در این پست کمی دربارۀ معماری این تکنولوژی براتون صحبت میکنم ...
 
تکنولوژی WPF یک تکنولوژی چند لایه ای ست. در بالاترین لایه اش اسمبلی های پایه ای WPF قرادارند که تماما به صورت کدهای مدیریت شده سی شارپ هستند. این لایه شامل API هایPresentationFramework.dll ، WindowsBase.dll و PresentationCore.dll می باشد که در واقع برنامه شما با این اسمبلی ها ارتباط دارد.
 
در لایه زیری آن، کامپوننت مدیریت نشده milcore.dll قرار دارد، تمامی کدهای نوشته شده توسط شما، از طریق لایه اول و ارتباط لایه اول با لایه دوم و کامپوننت مذکور تبدیل به آبجکت می شود.
 
در واقع دلیل اینکه کامپوننت milcore.dll به صورت مدیریت نشده هست، اینه که این کامپوننت بایستی ارتباط تنگ و مجتمع شده ای با Direct 3D داشته باشه و دارای کارایی بسیار بالایی از هر لحاظی باشد.
 
Direct 3D در لایه زیرین milcore.dll قرار دارد که به صورت یک API سطح پایین می باشد و در واقع به نوعی موتور WPF به همراه milcore نیز به حساب میاد.
 
زیر بخش های مختلف معماری WPF
 
1. 
PresentationFramework.dll : این اسمبلی در واقع تمامی آبجکت های سطحه بالا و در واقع به نوعی بالاترین سطح از آبجکت های WPF مانند Windows ها ( که بالاترین سطح در برنامه های WPF را در مدل برنامه نویسی WPFApplication دارد) و Panel ها که از دیگر اجزای اساسی برنامه های WPF می باشند، را نگه داری می کند.
 
2. 
Presentationcore.dll : شامل نوع های پایه از جمله UIElement و Visual میباشد که تمامی اشکال و کنترل های از این کلاس ها ارث بری می کنند. در قسمت بعدی نمودار سلسله مراتبی کلاس های WPF را نمایش میدم.
 
3.
Milcore.dll : در واقع هسته اصلی WPF در رندر کردن آبجکت ها به آبجکت هایی که لایه زیرین خودش یعنی Direct 3D نیاز دارد، میباشد. علاوه بر این در ویندوز ویستا، مدیر پنجره های دسکتاپ یعنی Desktop Windows manager (مدیریت کنندۀ پنجره های دسکتاب را بر عهده دارد) از همین کامپوننت استفاده می کند.
در واقع شما می توانید با فراخوانی DWM ، به فرم ها، به پنجره های برنامه خود، افکت هایی که پنجره های ویندوز ویستا دارا هستند را اضافه کنید.
 
4.
WindowsCodec.dll : یک API سطح پایین می باشد که قابلیت اعمال، کارهای زیادی را بر روی عکس ها، از قبیل بزرگ نمایی، چرخش و .. را دارد.
 
Direct 3D : یک API سطح پایین است که شامل تمامی گرافیک های رندر شده در WPF می باشد.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 ساختار سلسله مراتبی آبجکت ها در wpf
مثلا کلاس Button را در نظر بگیرید :
 
این کلاس در اولین سطح از کلاس ButtonBase ارث بری می کند و به ترتیب از کلاس های زیر ارث بری کرده تا نهایتا به کلاس DispatcherObject برسد.
 
 
 
DispatcherObject
.
DependencyObject
.
Visual
.
UIElementt
.
FrameWorkElement
.
Control
.
COntentControl
.
ButtonBase
.
Button
 
 
ترتیب ارث بری ها از پایین به بالا می باشد که به تفکیک قسمتی از این کلاس ها رو در پست های بعدی توضیح میدم

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 کاربرد های مختلف xaml در wpf
ابتدا توضیحی دربارۀ XAML میدم و سپس کاربردشو شرح میدم .
 
زبان XAML نوعی زبان نشانه گذاری است، و نحوه استفاده از آن و جایگاه آن را در تکنولوژی WPF یا همون Avalon و در ویژوال استودیو می باشد.
XAML مخفف عبارت EXtensible Application Markup Language می باشد. زبان XAML که یک زبان توصیفی ست، بر پایه قواعد XML می باشد. این زبان در ساخت برنامه های WPF نقش بسیار موثری را بازی می کند.
 
XAML در WPF : 
 
یکی از کاربرد های XAML در هنگام برنامه نویسی WPF می باشد که امکانات بسیاری را برای شما فراهم می کند. هر سند XAML در WPF می تواند نگهدارنده آبجکت های WPF باشد. این آبجکت های می توانند در بالاترین سطح، پنجره ها باشند و یا تنها یک آبجکت خط و یا یک مستطیل طراحی شده توسط برنامه نویس باشد.
 
XAML در WF : 
 
همانطور که XAML در WPF می تواند نگهدارنده آبجکت های WPF باشد، XAML در WF نیز می تواند نگهدارنده آبجکت ها در WF باشد، WF نیز مانند WPF درای آبجکت های بسیاری از جملهActivity Class ها و .. می باشد.
 
 
XAML در SilverLight :
 
نسخه ای دیگر از WPF وجود دارد به نام WPF/E که به نام SilverLight نیز معروف است و ممکنه شنیده باشید. در واقع توسط WPF/E یا همان SilverLight می تونیدم بسیاری از کارهایی را که با WPF قادر به انجام آن ها در برنامه های ویندوزی هستیم، مثل اشکال دو بعدی، صدا، تصویر، انیمیشن و ... را در برنامه های تحت وب به کار ببریم.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 ساختار فایل های xaml در wpf
در این پست کمی دربارۀ ساختار این زبان توضیح میدم چون لازمۀ کار در پروژه های WPF هست و در پست های بعدی یکسری از کنترل های پرکاربرد در پروژه های WPF رو به تفکیک شرح میدم
 
زبان XAML یک زبان XML base می باشد. پس قطعا شباهت بسیار زیاد و نزدیکی به قایل های XML دارد که زیاد باهاشون سروکار داشتین. اما به چهار نکته زیر که در رابطه با قوانین فایل های XAML باید دقت کنید
 
هر تگ آغاز شونده XAML نشان دهنده به نمونه ای از کلاس خاص در WPF خواهد بود مثلا تگ <TextBlock> نشان دهندۀ آبجکتی از کلاس TextBlock است. منظور از کلاس، هر کلاسی می تونه باشه.
فرض کنید، کلاسی با نام MyCustomTextBox ایجاد کردید حال می توانید با دستوری مشابه <cl:MyCustomTextBox> نمونه ای از آبجکت MyCustomTextBox را مشخص میکنه
 
کلمه cl به کار رفته در دستور بالا جزء کلمات کلیدی نیست، در واقع نباید این تصور را بکنید، برای ایجاد کلاس های ساخته شده خودمون، حتما کلمه cl را به کار ببریم. کلمۀ cl ، اشاره به فضای نامی دارد که کلاس MyCustomTextBox در آن قرار گرفته. 
 
به دو صورت می توانیم پایان تگ های XAML را مشخص کنیم.
 
1. در این حالت از علامت (/>) در پایان تگ استفاده کنید که بیانگر پایان تگ است.
 
کد:
<[Object Name] [ Object Attributes ] />
 
 
مثلا به این شکل با قاعدۀ بالا
 
کد:
<TextBlock Text="this is a sample textBlock"/>
 
 
2. از تگ (</[ObjectName]>) در پایان کد استفاده کنیم.
 
کد:
<[Object Name] [ Object Attributes ] ></[ObjectName]>
 
 
مثلا :
 
کد:
<TextBlock Text="this is a sample textBlock"></TextBlock>
 
 
استفاده از روش دوم بهتره و کاربردش با قاعدۀ که گفتم همخونی زیادی داره.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:02 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 فضای نام های xaml در wpf
در پست قبلی با دو دستور زیر آشنا شدید 
 
 
کد:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
 
کدهای بالا فضای نام های اساسی WPF هستند بنابراین، هر سند XAML مربوط به WPF باید این دو فضای نام را در خودشون داشته باشن. 
با به کار بردن کلمۀ xmlns می تونیم فضای نام های مورد نظرمونو را در اسناد XAML خودمون، تعریف کنیم . قاعده تعریف فضای نام ها به صورت زیر است :
 
کد:
xmlns="clr-namespace:[NameSpace Name];assembly=[Assembly Name]"
 
در تعریف بالا، به جای [NameSpace Name] باید نام فضای نام مربوطه رو را قرار بدید و به جای [Assembly Name] باید نام فایل اسمبلی رو که اون فضای نام در اون قرار گرفته رو قرار بدید.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 شکل یک سند xaml در wpf
با ساخت هر پروژۀ wpf در محیط ویژوال استودیو کدهای xaml به شکل زیر ایجاد میشن.
این کدها هنگام ایجاد پنجره های جدید به برنامه، برای هر پنجره توسط خود ویژوال استودیو ایجاد میشه.
 
کد:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        
    </Grid>
</Window>
 
 
اگه خوب دقت کنین، کد بالا دارای دو تگ کلی ست. یکی تگ Window و دیگری تگ Grid .
تگ Window به معنی اینه که، این فایل اشاره به یک آبجکت Window داره. و Windowها درWPF مثل Form ها در WindowsFormsApplication ها هستن.
 
تگ Grid اشاره به آبجکتی به نام Grid داره که پر کاربردترین آبجکت های WPF است که جزء کنترل های Container هم هست. این کنترل به همراه کنترل های دیگر که همه از کلاسی به نام panel ارث بری می کنند، وظیفه طرح بندی پنجره های رو دارن.
 
خط اول 
 
کد:
x:Class="WpfApplication1.MainWindow"
 
به معنی اینه که فایل XAML جاری، مربوط به کلاس Window1 که در فضای نام WpfApplication1 قرار گرفته.
 
خط دوم وسوم
 
کد:
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
 
این دوخط ، دو فضای نام کلی را در برنامه های WPF مشخص می کنه. هر سند XAML مربوط به WPF شامل این دو فضای نام است. 
 
خط چهارم
کد:
        Title="MainWindow" Height="350" Width="525">
 
در خط چهارم ، سه خاصیت برای Window تعریف شده، خاصیت اول مربوط Tilte پنجره است ، این خاصیت مثل خاصیت Text در فرم های ویندوزی است فرقی نداره. 
متنی که در این خاصیت قرار بگیره، به نوارعنوان پنجره و همچنین در زمانی که پنجره در حالت minimize قرار داره، درTaskbar ویندوز، نمایش داده میشه .
دوخاصیت بعدی هم به ترتیب ارتفاع و عرض Window را مشخص میکنه.
 
در پست های بعدی دربارۀ فضای نام ها توضیح میدم.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

خواص و رویداد های xaml در wpf
اگه یادتون باشه در دو پست قبلی، اشاره ای به سه خاصیت Title، Width و Height از کلاس Window کردم و اشاره شد که این مقادیر ، خواصی را برای پنجره ما مشخص می کنند که به ترتیب عبارت بودند از عنوان فرم ، عرض و ارتفاع فرم
 
خب به طور کلی در اسناد XAML ، به دو شکل می تونیم خواص یک عنصرو را مشخص کنیم دقت کنید : 
 
اضافه کردن خواص عناصر در تگ آغاز شده کنترل مربوطه ست، معمولا زمانی از این روش استفاده می کنیم که بتونیم مقادیر خواص را به راحتی تنظیم کنیم. مثلا به کد زیر دقت کنید :
 
کد:
<TextBox Name="txtNum1" HorizontalAlignment="Center"  VerticalAlignment= "Center" Background="Green" Foreground="White">this is sample TextBox</TextBox>
 
 
کد بالا، یک نمونه از آبجکت TextBox تعریف می کنه و تعدادی خواص رو از جمله رنگ برای پس زمینه و رنگ پیش زمینه و .. رو مشخص می کنه
 
 
خب این از اولین روش ، حالا روش دیگه ای هست که شاید کمی پیچیده باشه اما دونستنش خالی از لطف نیست
 
اضافه کردن خواص کنترل به صورت تگ های داخلی ، و بین تگ آغاز شده و پایانی کنترل مورد نظر است ببینید :
 
کد:
<TextBox>
 
    <TextBox.Name>txtNum1</TextBox.Name>
 
    <TextBox.HorizontalAlignment>Center</TextBox.HorizontalAlignmen
 
    <TextBox.VerticalAlignment>Center</TextBox.VerticalAlignment>
 
    <TextBox.Background>Green</TextBox.Background>
 
    <TextBox.Foreground>White</TextBox.Foreground>
 
    <TextBox.Text>this is sample TextBox
 
    </TextBox.Text>
 
</TextBox>
 
 
اجرای کدهای بالا در هر دو روش یکسانه ولی در روش دوم شما گاهی اوقات مجبور به تنظیمات پیچیده تری برای رنگ های زمینه و تنظیم قرار گیری کنترل ها برای یه خاصیت و... میشید که در روش اول امکانش نیست و باید از قاعدۀ دوم استفاده کنید

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 چینش عناصر در wpf
کنترل های (Container) اساس برنامه نویسی در WPF هستند. این کنترل ها، امکانت جالبی را در اختیار ما قرار میده که بتونیم کنترل های خودمونو را به صورت صحیح روی فرم قرار بدیم.
 
در WPF کنترل های Container زیادی وجود دارد که هر یک به نوعی امکانات خاصی را برای چیدن کنترل ها ایجاد می کنه. مثلا توسط کنترل کانتینری به نام StackPanel می تونید، کنترل های خودتونو به صورت پشته ای قرار بدید.
وهمچنین کنترلی به نام Grid به شما اجازه قرار دادن و تنظیم کنترل ها را در سلول هایی در سطرها و ستون هایی که ما تعیین می کنیم رو، میده
 
در این پست به چنتا کنترل Container اشاره میکنم
 
کنترل های اساسی (Container) در WPF عبارتند از :
 
1. Stack Panel
2. Canvas
3. Dockpanel
4. WrapPanel
5.UniformGrid
6. Grid
 
کنترل های Container ، می تونن به صورت داخلی هم قرار بگیرن
تمامی کنترل های قالب بندی WPF از کنترل پایه ای به نام Panel ارث بری می کنن
 
 
 
در پست های بعدی دربارۀ هرکدوم توضیح میدم

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 کنترل های (Container)
در پست قبلی دربارۀ چینش عناصر صحبت کردم و کنترل های اساسی روهم نام بردم ، خب در این پست قصد دارم تا شش موردی رو که خدمتتون ارائه دادم توضیحات مختصری رو بیان کنم
 
کنترل StackPanel :
 
همانطور که از نامش مشخصه ، این کنترل عناصر رو به صورت پشته ای مرتب می کنه. به دو صورت افقی و عمودی می تونیم کنترل ها را قرار بدیم.
 
کنترل Canvas : 
 
این کنترل اجازه قرار گرفتن کنترل ها را در مکان مشخص و ثابتی میده ، پس از قرار گرفتن عناصر روی این کنترل مکانشون برای همیشه ثبت میمونه.
 
کنترل DockPanel :
 
این کنترل کاربردی شبیه به خاصیت Dock در کنترل های دات نت فریم ورک 2.0 داره با این کنترل می تونید ، عناصر رو نسبت به لبه های مختلفش تنظیم کنید.
 
کنترل WrapPanel :
 
این کنترل، عناصر رو به صورت سطری و ستونی تا جایی که امکان داشته باشه، قرار میده. در حالت سطری، کنترل ها تا جایی که بتونن در یک سطر قرار می گیرن اگر فضای مورد نیاز کنترل ها از فضای موجود در یک سطر بیشتر باشه، بقیه کنترل ها به سطر بعدی منتقل میشن، در حالت ستونی عملی مشابه، در مورد ستون ها انجام میگیره.
 
 
کنترل UniformGrid :
 
این کنترل شبیه به کنترل Grid است. با این تفاوت که در این کنترل، سایز تمامی سلول ها یکسانه.
 
کنترل Grid :
 
این کنترل، پرکاربرد ترین کنترل Container ست، این کنترل با ایجاد سطر ها و ستون هایی به ما امکان قرار دادن عناصر رو در سلول مشخصی میده این کنترل شبیه به کنترل TableLayoutPanel در دات نت فریم ورک 2.0 است.

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 150653
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:>> Learning WPF Full <<

 کنترل StackPanel
در پست قبلی شش مورد از کنترل های Container رو نام بردم و یه توضیح مختصری دربارشون خدمتتون دادم ، در این پست به بررسی کنترل StackPanel می پردازم
 
این کنترل، عناصر داخل خودشو بر اساس جهتی که ما مشخص می کنیم (افقی یا عمودی) به صورت پشته ای مرتب می کنه.
 
در همون ابتدای ساخت یک پروژۀ wpf و قرار دادن این کنترل روی فرمتون کد زیرو با خواص زیر تولید میشه
 
کد:
        <StackPanel HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Margin="188,94,0,0"/>
 
 
خب دقت کنید که این کنترل با درگ دراپ روی فرم قرار گرفته ، در غر این صورت اگر بخواییم با کدنویسی فراخوانی و ایجادش کنیم باید کد زیرو بنویسیم که بلاک مربوط به خود کنترل به این شکل هست
 
کد:
<StackPanel>
    <!-- code Here-->
</StackPanel>
 
 
کنترل StackPanel قابلیت چیدن عناصر را به صورتی افقی رو داره با استفاده از خاصیت Orientation از این کنترل می تونید، نحوۀ قرار گیری عناصر رو مشخص کنید، این خاصیت دارای دو مقدار HorizontalAlignment و VerticalAlignment است که به ترتیب برای تراز کردن عناصر به صورت افقی و عمودی بر روی StackPanel به کار میره.
 
مقدار پیش فرض خاصیت Orientation برابر با Vertical است، ولی اگه خاصیت Orientation رو برای StackPanel تنظیم نکنید عناصر به صورت پشته عمودی قرار میگیرند

💮 صبور باش 💮
 🌱چیزایِ خوب زمان می برن🌱

جمعه 25 اردیبهشت 1394  7:03 AM
تشکرات از این پست
دسترسی سریع به انجمن ها