جستجو در تالار

در حال نمایش نتایج برای برچسب های 'برنامه نویسی'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • عمومی
    • اطلاعیه
    • اخبار
    • پیشنهادها و انتقادات
    • درخواست آموزش
    • مشکلات و مسائل انجمن
    • متفرقه
  • سوالات، مشکلات و درخواست
    • ویندوز استور
    • وب (ASP.Net)
    • ویندوز دسکتاپ (Win32 & WPF)
    • زامارین فرم (Xamarin.Forms)
    • زامارین اندروید
    • زامارین iOS
    • دات نت کور
    • اینترنت اشیاء (IOT)
    • سوالات کلی و عمومی
  • توسعه نرم افزارهای ویندوز استور
    • سوالات، مشکلات پروژه های ویندوز استور
    • مقالات، کتاب ها و منابع آموزشی
    • سورس کدهای آموزشی
  • برنامه نویسی زامارین
    • زامارین فرم (Xamarin.Forms)
    • زامارین ios
    • زامارین اندروید
    • عمومی
  • برنامه نویسی ASP.NET
    • مقالات، کتاب ها و منابع آموزشی
    • .Net Core
    • ASP.NET MVC
    • ASP.NET WebForm
  • اینترنت اشیاء
    • مقالات، کتاب ها و منابع آموزشی
    • سخت افزار
    • نرم افزار
    • پروژه ها
  • متفرقه
    • آموزش ابزارها و نرم افزار ها
    • آموزش های سرویس ها و سایت ها
    • سوالات و مشکلات برنامه نویسی Win 32
  • نرم افزار
    • نرم افزار های تیم انجمن
    • نرم افزار های ساخت شما
    • سفارش نرم افزار و برنامه نویسی
    • معرفی ابزارها و نرم افزارهای مرتبط
    • درخواست ابزار کمکی
    • مشکلات و سوالات در مورد نرم افزار ها

گروه


آدرس تارنما


یاهو


اسکایپ


حساب مایکروسافت


شماره تماس


تلگرام


مکان


علایق


نام توسعه دهندگی

20 نتیجه پیدا شد

  1. سلام؛ چگونه می توانم از طریق کد نویسی یک هات اسپات ایجاد کنم؟! می خواهم یک هات اسپات دلخواه ایجاد کرده و یک روتر ایجاد کنم. اشتراک گذاری اینترنت مد نظرم نیست و تنها اتصال دستگاه ها و تبادل اطلاعات برایم مهم هست.
  2. آموزش استفاده از کنترل های رایج XAML استفاده ترکیبی از کنترل ها باعث می شود که شما بهتر با نحوه کارکرد کنترل ها آشنا شوید. پروژه جدید یکپارچه ایجادکنید و نام آنرا WN XAML Common Controls قرار دهید. در این پروژه قرار است با نحوه استفاده از کنترل های زیر آشنا شویم: ListView CheckBox RadioButton StackPanel ComboBox TextBox Image GridView Rectangle DatePicker TimePicker Pivot (تصویر بالا شکل برنامه است) صفحه MainPage.xaml را باز کنید و کدهای زیر را به جای <Grid.. </Grid> قرار دهید: <ListView x:Name="listView1" Background="White"> <CheckBox x:Name="checkBox1" Margin="5" Content="Check Box 1" /> <CheckBox x:Name="checkBox2" Margin="5" Content="Check Box 2" /> <StackPanel Orientation="Horizontal"> <RadioButton x:Name="radioButton1" Margin="5" Content="Radio Button 1" /> <RadioButton x:Name="radioButton2" Margin="5" Content="Radio Button 2" /> </StackPanel> <ComboBox x:Name="comboBox1" Margin="5"> <ComboBoxItem Content="ComboBox Item 1" /> <ComboBoxItem Content="ComboBox Item 2" /> <ComboBoxItem Content="ComboBox Item 3" /> <ComboBoxItem Content="ComboBox Item 4" /> <ComboBoxItem Content="ComboBox Item 5" /> </ComboBox> <TextBox x:Name="textBox1" Margin="5" Text="http://www.win-nevis.com" /> <Image x:Name="image1" Margin="5" Source="WinNevisLogo.png" Stretch="None" /> <GridView x:Name="gridView1" Margin="5"> <Rectangle x:Name="rectangle1" Fill="Red" Height="100" Width="100" /> <Rectangle x:Name="rectangle2" Fill="#FF00C5FF" Height="100" Width="100" /> <Rectangle x:Name="rectangle3" Fill="#FFFFD100" Height="100" Width="100" /> </GridView> <DatePicker x:Name="datePicker1" Margin="5" /> <TimePicker x:Name="timePicker1" Margin="5" /> </ListView> بپردازیم به کدها... <ListView x:Name="listView1" Background="White">… ListView در ابتدا کنترل ListView قرار دادیم تا همه ی کنترل ها به صورت لیستی عمودی در زیر هم قرار بگیرند. کنترل ListView بسیار پر کاربرد است، این کنترل دارای Property های خاصی است که چند نمونه را بیان می کنیم... . Items کالکشنی (لیست) است که کنترل ها را در خود جای می دهد، این پراپرتی از نوع ItemCollection است و می تواند تقریبا هر کنترل یا شئ ای را در خود جای دهد. این پراپرتی دارای توابعی است که از آنها می توان به Add, Remove, RemoveAt, Insert, Clear اشاره نمود. تابع Add برای اضافه کردن کنترل، Remove برای حذف کنترل چنانچه آن کنترل را در اختیار داشته باشیم، RemoveAt برای حذف کنترل بر اساس شناسه، Insert اضافه کردن آیتم در یک شاخص خاص(مثلا در ردیف 50)، Clear برای پاک کردن تمامی کنترل ها از لیست به کار می روند. SelectedIndex یا شاخص انتخاب شده، داده ی عددی از نوع integer است. این داده عددی را برمیگرداند که از آیتم انتخاب شده لیست ویو است. توجه داشته باشید که اندیس کنترل ها را بازگردانی می کند. SelectedItem آیتم انتخاب شده را بازگردانی می کند که با نوع object است یعنی پس از آن دریافت باید نوع آنرا خودمان تعیین کنیم. یعنی اگر در لیست بنده همه آیتم ها از نوع TextBox هستند، این کار را باید انجام دهیم: TextBlock selectedItem = listView1.SelectedItem as TextBlock; چنانچه مانند نمونه کدها، از چندین نوع شئ در لیست ویو استفاده می کنیم، نوع آیتم انتخاب شده را دریافت کنید و در شرطی آنرا بررسی کنید:[/size] if(listView1.SelectedItem.GetType() == typeof(TextBlock)) { // code } تابع GetType نوع هر داده ای را باز گردانی می کند که از نوع Type می باشد. کلمه کلیدی typeof نیز مشخص می کند که ما می خواهیم تایپ یا نوع داده را از نوعی که می خواهیم باشد. پس چنانچه آیتم انتخاب شده برابر با نوعی است که ما می خواهیم شرط درست است. SelectedItems در لیست ویو امکان انتخاب چند مورد وجود دارد، این پراپرتی توانایی بازگردانی لیست آیتم های انتخاب شده را داراست. SelectedMode تعیین می کند که آیا لیست ویو بتواند یک آیتم، چند آیتم را انتخاب کند یا اینکه حتی نتواند آیتمی را انتخاب کند. <CheckBox x:Name="checkBox1" Margin="5" Content="Check Box 1" /> <CheckBox x:Name="checkBox2" Margin="5" Content="Check Box 2" /> CheckBox جعبه انتخابی، اجازه می دهد کاربر گزینه ای را تیک بزند، اگر از چندین CheckBox در یک کنترل والد استفاده کنیم، هر چک باکس می تواند تیک (علامت) بخورد یا نخورد و وابسته با باقی چک باکس ها ندارد. پراپرتی IsSelected می تواند سه مقدار بگیرد، True و False و x:Null که تعیین می کند چک باکس ما کدام وضعیت را دارد. <StackPanel Orientation="Horizontal"> StackPanel این کنترل نیز مانند ListView است با اندکی تفاوت. پراپرتی Orientation تعیین می کند که کنترل هایی که درون این شئ قرار می گیرند به چه صورت اضافه شوند(عمودی یا افقی) به صورت پیشفرض اگر این پراپرتی را تعیین نکنیم کنترل هایی که اضافه می شوند به صورت عمودی زیر هم قرار می گیرند. در اینجا حالت افقی را قرار داده ایم تا دو کنترل RadioButton در کنار هم قرار بگیرند. <RadioButton x:Name="radioButton1" Margin="5" Content="Radio Button 1" /> <RadioButton x:Name="radioButton2" Margin="5" Content="Radio Button 2" /> RadioButton دکمه رادیویی نیز مانند CheckBox است اما با کمی تفاوت، چناچه یکی از آنها انتخاب شود، آیتم های دیگر خودکار تیک آنها برداشته می شود، برای مثال نمی توانیم هر دو مورد را علامت بزنیم، چنانچه اقدام به این کار کنیم، شئ دیگر خودکار علامتش برداشته میشود. البته این موضوع به والد آنها نیز وابسطه است. در اینجا شئ والد StackPanel است اگر در یک StackPanel دیگر دو دکمه رادیویی دیگر قرار دهیم، علامت زدن آنها به علامت زدن این دو ربطی نخواهد داشت. <ComboBox x:Name="comboBox1" Margin="5"> <ComboBoxItem Content="ComboBox Item 1" /> <ComboBoxItem Content="ComboBox Item 2" /> <ComboBoxItem Content="ComboBox Item 3" /> <ComboBoxItem Content="ComboBox Item 4" /> <ComboBoxItem Content="ComboBox Item 5" /> </ComboBox> ComboBox جعبه ترکیبی برای به نمایش در آوردن آیتم های فراوان است که یکی از آنها قابل انتخاب است. این کنترل می تواند هر نوع داده ای را در خود جای دهد. مانند لیست ویو SelectedIndex و SelectedItem دارد. <TextBox x:Name="textBox1" Margin="5" Text="http://www.win-nevis.com" /> TextBox جعبه متنی، این کنترل به کاربر این امکان را می دهد که بتواند چیزی را بنویسید.پراپرتی Text متن نوشته کاربر است. پراپرتی InputeScope به صورت پیشفرض اعداد، حروف، سمبل ها و... در تکست باکس قابل نمایش است، اما چنانچه می خواهید تکست باکس را اختصاص دهید مثلا برای فقط شماره ها، یا ایمیل، یا چت، بهتر از این پراپرتی استفاده کنید که دارای 42 گزینه برای انتخاب است! پراپرتی PlaceholderText نیز متنی را به نمایش در می آورد زمانی که هیچ چیزی در TextBox نوشته نشده باشد. مثلا همان type something در اکثر برنامه های چت. <Image x:Name="image1" Margin="5" Source="WinNevisLogo.png" Stretch="None" /> Image این کنترل تصاویر را به نمایش می گذارد. با استفاده از پراپرتی Source می توانیم محل عکس را تعیین کنیم، در اینجا عکسی با نام WinNevisLogo.png در قسمت روت پروژه وجود دارد که آنرا اینگونه تعریف کردیم. پراپرتی Stretch یا کِش آمدن تصویر، این امکان را می دهد که تصاویر را کِش آوریم یا اینکه تصویر اصلی با سایت اصلی را به نمایش در آوریم. <GridView x:Name="gridView1" Margin="5"> GridView این کنترل نیز مانند لیست ویو است با این تفاوت که کنترل ها در کنار هم به صورت افقی قرار می گیرند. چنانچه تعداد کنترل ها بیش از اندازه عرض صفحه باشد، کنترل ها به صورت افقی و عمودی در می آیند. <Rectangle x:Name="rectangle1" Fill="Red" Height="100" Width="100" /> <Rectangle x:Name="rectangle2" Fill="#FF00C5FF" Height="100" Width="100" /> <Rectangle x:Name="rectangle3" Fill="#FFFFD100" Height="100" Width="100" /> Rectangle کنترل رنگی با استفاده از پراپرتی Fill می توان رنگ یا تصویری را برای آن انتخاب نمود. <DatePicker x:Name="datePicker1" Margin="5"/> DatePicker انتخاب گر تاریخ، دارای پراپرتی Date از نوع DateTimeOffset است که کاربر می تواند تاریخی را انتخاب کند. <TimePicker x:Name="timePicker1" Margin="5" /> TimePicker انتخاب گر زمان، دارای پراپرتی Time از نوع TimeSpan است که کاربر می تواند زمانی را انتخاب کند. خب تا اینجا با 11 کنترل از 13 تایی که قرار بود آموزش بدهیم، آشنا شدید. برای دو کنترل دیگر دو پروژه مجزا ایجاد می کنیم. Pivot پروژه جدیدی یکپارچه ای به نام WN Pivot Sample ایجاد و صفحه MainPage.xaml را در آن باز کنید. در پنجره Toolbox دو بار روی کنترل Pivot کلیک کنید یا اینکه آنرا بکشید و در صفحه طراحی رها کنید تا این کنترل به صفحه اضافه شود: کنترل Pivot دارای خاصیتی به نام Title است که عنوان را مشخص می کند، معمولا نام برنامه را در این قسمت قرار می دهند. نیازی نیست حتما Pivot دارای عنوان باشد. عناصری که Pivot به عنوان تب قرار میگیرند PivotItem نام دارند. Pivot فقط می تواند PivotItem را به نمایش در آورد ما نمی توانیم جای PivotItem از Grid یا کنترل های دیگر استفاده کنیم. هر PivotItem دارای خاصیتی به نام Header است که نام یا آیکون تب را تعیین می کند. اگر بخواهیم جای نوشته از آیکون یا عکسی استفاده کنیم کافی است Header را پاک کرده و درون تَگِ PivotItem تگِ زیر را اضافه کنیم: <PivotItem.Header> <Image Source="WinNevisLogo.png" /> </PivotItem.Header> با این کار می توانیم عکسی را جای نوشته قرار دهیم: هر PivotItem می تواند یک Content ـی داشته باشد که به صورت پیشفرض Grid است چرا که میتواند تمامی اشیاء را درون خود جای دهد. روی <Grid/> PivotItem اول کلیک کنید و از ToolBox کنترل TextBlockـی را به درون قسمت طراحی اضافه کرده و نام آنرا برابر با Win-Nevis بگذارید. حال روی Gridـه PivotItemـه دوم کلیک کرده و کنترل دکمه ای درون آن بیاندازید و Content آنرا برابر با Click قرار دهید. چیزه خاص دیگری نیست که فعلا نیاز باشد راجع به این کنترل بدانید، پس به همین اکتفا می کنیم. نکته: قرار بود SplitView و ساخت منوی همبرگری رو هم توی این درس آموزش بدیم اما چون لازمه ی این کار چیزهای دیگری است ساخت منوی همبرگری به درس های بعد موکول می شود. کتاب الکترونیک + پروژه این درس پیوست شد. این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Windows 10 Introduction S01E04.pdf WN Xaml Common Controls.zip
  3. سلام؛ من می خوام همچین چیزی رو ایجاد کنم اما به مشکل برخوردم: از ScrollViewer که استفاده می کنم، وب ویو به نمایش در نمیاد و اگر هم از ListView استفاده کنم، وب ویو رو هم باید اسکرول کنم و همچنین ارتفاعش بسیار اندک هست. راهکارتون برای این کار چیست؟ با تشکر
  4. سلام؛ مدت طولانی هست که من با این دو موضوع بسیار درگیری ذهنی پیدا کردم. برنامه ای که تنها چند خط کد دارد، علاوه بر حجم بالا(چرا حجم بالایی دارد؟)، سرعت بارگذاری بسیار پایینی دارد (UI برنامه چقدر در بارگزاری برنامه تاثیر دارد؟ چه نکاتی مهم است؟) و باید 16 ثانیه منتظر بمانم تا برنامه کاملا لود شود. در برخی مواقع با ارائه یک پیش نمایش کش مانند می توان مقداری حس سرعت لود مناسب را به کاربر القا کرد (چگونه؟ و چه راهی مناسب است؟) چگونه با متدهای Async و Task برخورد کنیم تا سرعت لود مناسب داشته باشیم؟ چگونه آنها را مدیریت کنیم تا تداخلی پیش نیاید؟ (به خصوص وقتی یک متد به نتیجه متد async قبل وابسته است). و هر آنچه لازم است بدانیم تا یک برنامه پرسرعت و بدون لگ و کم حجم داشته باشیم را در این تاپیک با هم مرور میکنیم. منتظر راهکارها، تجربیات و مشکلات شما هستیم.
  5. سلام این چهارتا تبلیغات بالای سایت ، به صورت نافرم روی هم قرار گرفته اند ، عمودی چیده شده اند . به نظرم جور دیگه ای بود ، بهتر بود ، افقی یا مثلا دو تاش بالای صفحه ، دوتاش پایین صفحه .
  6. سلام به وین نویسی ها، عصر پاییزیتون بخیر، امیدواریم سر حال باشید. پس از انتشار اولین نسخه از سورنا بعضی از دوستان از طریق تلگرام و ایمیل درخواست آموزش ساخت دیتابیس آنلاین رو دادند و اینکه چطوری میشه به دیتابیس سایتی که دارم متصل بشیم. در این آموزش شما به یک دامنه و یک هاست ویندوزی نیاز دارید. برای شروع شما می توانید از سایت زیر هاست ویندوزی را تهیه نمایید. نکته: هاست باید از MySQL پشتیبانی کند. نکته: شما باید گزینه Microsoft Web Developer Tools را نصب کرده باشید. دانلود کتاب الکترونیک آموزش دانلود پروژه UWP (برنامه) دانلود پروژه سایت (ASP) درون فایل فشرده پروژه سایت، دو تا فولدر وجود داره، برای باز کردن پروژه به پوشه Projects بروید و Win Nevis را انتخاب کنید و راه حل را با ویژوال استودیو باز کنید. چون ما پروژه را به صورت سایت ایجاد کردیم، فقط فایل راه حل درون Visual Studio 2015/Projects قرار میگیرد و تمامی کدها و کلاس هایمان درون پوشه Visual Studio 2015/WebSites قرار میگیرند. منبع: وین نویس
  7. سلام من برای ویندوزفون به نرم افزار زیر احتیاج دارم. metatrader4 نسخه دسکتاپ این نرم افزار هستش آیا کسی می تونه این نرم افزار رو بصورت یونیورسال بنویستش.
  8. بسم الله الرحمن الرحیم. سلام؛ بعد از آموزش نصب ویندوز 10 روی رسپبری پای 3 (برای سایر بردها هم فرقی نمی کنه و به همین روش هست) اینبار می خواهیم یک برنامه ساده رو بنویسیم و روی برد اجرا کنیم. همونطور که می دونید هسته های سیستم عامل ویندوز 10 در دستگاه های مختلف یکسان هست و این به ما اجازه می ده تا با یک بار کد نویسی، یک برنامه برای پلتفرمهای مختلف مایکروسافت که شامل دسکتاپ، تبلت، کنسول، موبایل، هالولنز و اینترنت اشیاء می شود ایجاد کنیم. یعنی دقیقا همون برنامه ای رو که الان روی موبایلتون دارید رو می تونید روی رسپبری پای هم اجرا کنید. خب همونطور که حدس زدید از اونجا که برنامه نویسی یک پارچه است پس به SDK مربوطه علاوه بر ویژوال استدیو نیاز دارید. اکنون وقت آن است که برنامه رو بنویسم. در اینجا قصد ما آموزش برنامه نویسی نیست، چون تفاوت چندانی ندارد. اولین برنامه ما همان "سلام دنیا"ی معروف است که این بار می خواهیم بر روی رسپبری اجرا کنیم. خب، یه پروژه جدید با نام دلخواه باز کنید، و کدهای لازم رو هم بزنید. برای اینکه بتونید برنامه رو روی ویندوز 10 اینترنت اشیا نصب کنید لازمه اکستنش های اینترنت اشیاء رو به پروژه اضافه کنید. در منو Solution بر روی reference راست کلیک کرده و سپس به مسیر Add Reference > Universal Windows > Extensions برید و تیک Windows iot Extensions for uwp رو بزنید و اوکی کنید. توجه کنید که باید هر دو دستگاه در یک شبکه باشند. برای اینکه چک کنید رسپبری پای شما به شبکه متصل هست و سیستم شما می تونه اون رو پیدا کنه می تونید از برنامه Windows 10 IoT Core Dashboard که در مقاله قبل معرفی کردم استفاده کنید. برنامه رو اجرا کنید و به تب my devices برید. اگر دستگاه رو مشاهده کردید پس مشکلی وجود نخواهد داشت. در گام بعدی باید پلتفرم سولوشن رو ARM قرار بدیم: حالا دستگاه مورد نظر رو هم Remote Machine میزنیم: حالا باید اسمی رو که هنگام نصب ویندوز برای دستگاه انتخاب کرده بودید رو وارد کنید. توی داشبورد قسمت مای دیوایس می تونید اسم رو ببینید اگر فراموش کردید. Authentication.... رو هم مطابق تصویر univeral قرار بدید و روی Select کلیک کنید. در صورت وجود نداشتن مشکلی می تونید کلید F5 رو بزنید تا برنامه Deploy بشه و روی رسپبری نصب بشه. تمام.
  9. در این ساعت از وین نویس با آموزش کنترل SemanticZoom با ما همراه شوید... بدون مقدمه به سراغ آموزش میرویم... SemanticZoom دو پراپرتی درونی داره به نام ZoomedInView و ZoomedOutView که اولی با GridView و دومی با ListView پُر میشه، و به ترتیب اولی کنترل هایی هست که کاربر می بینه(بزرگنمایی) و دومی هم کلید واژه ها(کوچک نمایی) است. ساختاری اون به شکل زیر می باشد ​ <SemanticZoom> <SemanticZoom.ZoomedInView> <!-- Put the GridView for the zoomed out view here. --> </SemanticZoom.ZoomedInView> <SemanticZoom.ZoomedOutView> <!-- Put the ListView for the zoomed in view here. --> </SemanticZoom.ZoomedOutView> </SemanticZoom> خب پروژه جدیدی یکپارچه ای به نام WN SemanticZoom ایجاد کرده و پس از آن یک کلاس به نام MyType.cs درون پروژه ایجاد کنید. سپس مقادیر این کلاس به شکل زیر در آورید: public class Item { public string Name { get; set; } public string Key { get { return Name.Substring(0, 1).ToUpper(); } } } public class ItemCategory { public string Key { get; set; } public string Name { get; set; } public List<Item> Items { get; set; } } کلاس Item در واقع آیتم هایی است که کاربر به صورت پیشفرض درون ZoomedInView می بیند خواهد بود. متغیر Name نامی که به کاربر نشان می خواهیم داده شود است و متغیر Key در واقع کلید واژه نام است که کاراکتر اول نام را میگیرد و حرف آنرا بزرگ می کند. کلاس ItemCategory همانطور که از نامش پیداست برای دسته ها می باشد. این کلاس برای این ایجاد شده است تا زمانی که ما با استفاده از LINQ لیستی از آیتم ها را داریم آنها را مرتب سازی کنیم تا بتوانیم هر دسته را ایجاد کنیم. دسته بندی نیز دارای نام است و یک کلید واژه و لیستی از کلاس آیتم. اما چرا باید لیستی از کلاس آیتم داشته باشد؟ برای مثال نام های زیر را در نظر بگیرد: Alireza Ahmad Mehrdad Mahyar Raha Arman Arian در لیست بالا سه کلید واژه وجود دارد، یکی A که دارای چهار اسم علیرضا، احمد، آرمان و آرین است، کلید واژه M که دارای اسامی مهرداد و مهیار است و کلید واژه R که دارای اسم رها است. هر دسته بندی کلید واژه را میگیرد و لیستی از اسم ها را که با یک کلید واژه مشابه هم هستند، به صورت لیست در می آورد. پس در اصل اسامی بالا را بدین شکل باید فرض کنید: A Ahmad Alireza Arian Arman M Mahyar Mehrdad R Raha حال صفحه MainPage.xaml را باز کنید و در قسمت ریسورس صفحه کد زیر را قرار دهید: <Page.Resources> <CollectionViewSource x:Name="groupItemsViewSource" IsSourceGrouped="true" ItemsPath="Items" /> </Page.Resources> این لیست برای بایند کردن به GridViewـه ZoomedInView می باشد. پس درون سی شارپ هرگاه به متغیر Sourceـه این کالکشن، اضافه شود، در اصل به GridViewـی که درون ZoomedInView است اضافه می شود. درون کنترل Grid اصلی صفحه کنترل SemanticZoomـی اضافه کنید و نام آنرا mySemanticZoom بگذارید. حال رویداد ViewChangeStarted را برای این کنترل ایجاد کنید. این رویداد را ما باید هندل کنیم، زمانی که لیست کلید واژه ها می آید، چنانچه این رویداد هندل نشده باشد اگر روی کلید واژه کلیک کنیم هیچ اتفاقی نخواهد افتاد.(بعدا کدهای سی شارپ این رویداد را خواهیم نوشت). <SemanticZoom x:Name="mySemanticZoom" ViewChangeStarted="mySemanticZoom_ViewChangeStarted"> </SemanticZoom> هم اکنون زمان آن است که برای دسته بندی ZoomedOutView کنترل GridViewـی ایجاد کنیم و با استفاده از ItemTemplate برای آیتم های آن یک Template ایجاد کنیم که نام کلید واژه در آن قرار بگیرد. درون بلاک SemanticZoom کدهای زیر را بنویسید: <SemanticZoom.ZoomedOutView> <GridView x:Name="gridViewKeys" SelectionMode="None"> <GridView.ItemTemplate> <DataTemplate> <Grid Height="75" Width="75" Background="#FF343434" HorizontalAlignment="Center" VerticalAlignment="Center"> <!--واژه کلید--> <TextBlock Text="{Binding Key}" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" /> </Grid> </DataTemplate> </GridView.ItemTemplate> </GridView> </SemanticZoom.ZoomedOutView> GridView ای به نام gridViewKeys ایجاد کردیم و مقدار SelectionMode آنرا برابر با None قرار دادیم که آیتم های آن قابل انتخاب شدن نباشد. سپس با استفاده از GridView.ItemTemplate برای این کنترل، تمپلیتی ایجاد کردیم. درون آن یک Grid به کار برده شد به طول و عرض 75 و رنگ پس زمینه تیره. درون این Grid یک کنترل TextBlock قرار دادیم و مقدار Textـه آنرا برابر با مقدار بایند شده Key قرار دادیم. حال باید برای ZoomedInView نیز کارهایی انجام دهیم. کدهای زیر را به بلاک SemanticZoom اضافه کنید: <SemanticZoom.ZoomedInView> <GridView x:Name="gridViewItems" ItemsSource="{Binding Source={StaticResource groupItemsViewSource}}" SelectionMode="None"> <GridView.ItemTemplate> <DataTemplate> <Grid Background="#FF0C0C0C" Height="130" Width="100"> <TextBlock TextWrapping="Wrap" Text="{Binding Name}" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" /> </Grid> </DataTemplate> </GridView.ItemTemplate> <GridView.GroupStyle> <GroupStyle HidesIfEmpty="False"> <GroupStyle.HeaderTemplate> <DataTemplate> <!--واژه کلید--> <TextBlock FontSize="20" Text="{Binding Key}" Foreground="#FF007E83" Margin="15,0,0,0" /> </DataTemplate> </GroupStyle.HeaderTemplate> </GroupStyle> </GridView.GroupStyle> </GridView> </SemanticZoom.ZoomedInView> GridViewـیی به نام gridViewItems ایجاد کردیم و ItemsSourceـه آنرا با استفاده از بایند کردن، به کاکشنی که ریسورس صفحه قرار دادیم بایند کردیم. ItemTemplateـی نیز برای آن اختصاص دادیم که نام افراد را به نمایش در آورد. در این GridView، تنظیماتی برای GroupStyle یا استایل دهی گروه ها نیز انجام دادیم. مقدار HidesIfEmpty را برابر با False قرار دادیم چرا که نمی خواهیم زمانی که گروهی خالی بود آنرا مخفی کند. درون این GroupStyle باید Templateـه Header را تغییر دهیم، این همان کلید واژه هایی خواهد بود که در بالای دسته ها نمایش داده می شوند. مقدار Key را درون این Template بایند می کنیم. حال صفحه MainPage.xaml.cs را باز کنید تا چند خطی نیز سی شارپ کار کنیم... تابع رویداد ViewChangeStartedـه کنترل SemanticZoom: private void mySemanticZoom_ViewChangeStarted(object sender, SemanticZoomViewChangedEventArgs e) { if (e.SourceItem.Item == null) return; if (e.IsSourceZoomedInView == false) e.DestinationItem = new SemanticZoomLocation { Item = e.SourceItem.Item }; } چنانچه مقدار SourceItem.Item برابر با null بود باقی کدها را نخوان. چنانچه IsSourceZoomedInView برابر با False بود، یعنی در حالت ZoomedOutView بودیم، مسیر آیتم را به مکلنی جدید تغییر میدهیم. حال درون Constructorـه صفحه رویداد Loadedـه صفحه را ایجاد کنید: public MainPage() { this.InitializeComponent(); Loaded += MainPage_Loaded; } تابع آن: private void MainPage_Loaded(object sender, RoutedEventArgs e) { List<Item> items = new List<Item>(); items.Add(new Item { Name = "Arman Heydari" }); items.Add(new Item { Name = "Kamran Dehghan" }); items.Add(new Item { Name = "Ramin Mazloomi" }); items.Add(new Item { Name = "Abolfazl Hoshmand" }); items.Add(new Item { Name = "Raha Ilani" }); items.Add(new Item { Name = "Sepehr Divand" }); items.Add(new Item { Name = "Reza Farahani" }); items.Add(new Item { Name = "Akbar Majedi" }); items.Add(new Item { Name = "Amir Hossein Adib" }); items.Add(new Item { Name = "Atila Boromand" }); items.Add(new Item { Name = "Ziba Khobkar" }); items.Add(new Item { Name = "Iran Irani" }); items.Add(new Item { Name = "C# Programmer" }); items.Add(new Item { Name = "Win Nevis" }); List<ItemCategory> categoriesList = new List<ItemCategory>(); // sorted list var sortedList = items.OrderBy(it => it.Key).GroupBy(it => it.Key); foreach (IGrouping<string, Item> item in sortedList) categoriesList.Add(new ItemCategory() { Key = item.Key, Items = item.ToList() }); groupItemsViewSource.Source = categoriesList; gridViewKeys.ItemsSource = categoriesList; } لیستی از نوع Item ایجاد کردیم، و چندین اسم را به آن اضافه کردیم. سپس لیستی از ItemCategory ایجاد کردیم. با استفاده از LINQ آیتم ها را بر اساس کلید واژه های آن مرتب سازی می کنیم (soortedList) سپس با حلقه درون لیست مرتب سازی شده میگردیم و آنها را به لیست دسته بندی هایمان اضافه می کنیم. در آخر نیز لیست دسته بندی هایمان را به Sourceـه groupItemsViewSource و ItemsSourceـه gridViewKeys می دهیم. به همین سادگی و خوشمزگی! PDF + پروژه این آموزش پیوست شد. منبع: وین نویس SemanticZoom Sample.zip Windows 10 Introduction S01 SemanticZoom.pdf
  10. چجوری میشه از شر نوار git خلاص شد ؟
  11. سلام؛ من می خواهم وقتی رویداد OnNavigatedTo رویداد، اسم صفحه قبل رو بررسی کنم. اگر از کد زیر برای نویگیشن استفاده کنم: Frame.Navigate(typeof(Page2); می تونم با کد زیر اسم پیج آخر رو بگیرم: var lastPage = Frame.BackStack.Last().SourcePageType; اما مشکل من اینجاست که این کد برای برگشت توسط دکمه سخت افزاری کاربردی نداره. به عبارتی این کد تا زمانی کاربرد دارد که از دستور اول استفاده کرده باشیم. حالا چطور می‌توانم اسم صفحه مورد نظر رو بررسی کنم؟ با تشکر.
  12. سلام؛ در قسمتی از برنامه باید به حساب گوشی دسترسی داشته باشم. اگر روی گوشی یا دسکتاپ حساب کاربر لوکال باشه، سیستم عامل به صورت خودکار از کاربر می خواهد که وارد حساب کاربری مایکروسافت خودش بشه. سوال اینجاست که چگونه تشخیص بدم که کاربر حسابی رو وارد کرده یا خیر؟ با تشکر.
  13. سوال

    سلام؛ یک وب ویو دارم که با متد زیر متن HTML رو بهش میدم: VW.NavigateToString("HTML TEXT"); اما بر اساس فونت پیش فرض خودش اطلاعات رو نمایش میده. من یک فونت در فولدر ASSETS به آدرس زیر دارم: Assets/Font/BYekan.TTF#B Yekan چطور می تونم مطالب رو با این فونت به نمایش بگذارم؟ با تشکر.
  14. سلام؛ حتما برای شما هم پیش آمده که بعد از تغییر لوگوهای پیش فرض در Package.appxmanifest دیگر نتوانستید برای استور پیکج بسازید. بعد از کلی جستجو و پرسیدن و کمک گرفتن از رامین، به این راه حل رسیدیم: نکته: لطفا قبل از شروع یک نسخه پشتیبانی از پروژه تهیه بفرمایید. 1. ویژوال استدیو رو با ادمین باز کنید. 2. تمامی لوگوهای موجود در پوشه Assets رو پاک کنید. 3. Solution رو Clean کنید و بعد ویژوال استدیو رو ببندید. 4. وارد پوشه پروژه بشوید و دو پوشه Bin و Obj رو حذف کنید. 5. مجددا ویژوال را با حالت ادمین باز کنید. 6. به Package.appxmanifest و قسمت لوگوها بروید. تنها لوگوهایی که تیتر شده را اضافه کنید. 7. یکبار پکیج استور بسازید. 8. اگر مجددا خطا گرفتید، با توجه به خطاها، عبارت Scale-100 یا همچین عبارتی را از انتهای نام لوگو مورد نظر پاک کنید. 9. پکیج استور بسازید! موفق باشید.
  15. چجوری میتونم فایل appx که از ویژوال خروجی گرفتم روی موبایل ویندوزی نصب کنم در واقع سه تا پوشه x86,x64,ARM دارم که داخل هر کدومش یه فایل appx و یه سری فایل دیگه هست همشونو تست کردم ولی هیچکدومش نصب نشد .ولی با ویژوال روی شبیه ساز و هم روی گوشی اجرا و نصب میشه
  16. آموزش

    سلام؛ این آموزش بهتون کمک می کنه تا بتونید با استفاده از کلاس CameraCaptureUI یک دوربین عالی و ساده در برنامه خود داشته باشید. این کلاس ساده بوده و دسترسی سطح پایین مثل کنترل ISO و HDR بهتون نمی ده. ولی خب برای اکثر برنامه ها کافیه و امکانات مناسبی داره. این آموزش در چند مرحله تقدیمتون میشه. 1. گرفتن عکس: برای اینکه بتونیم از کلاس CameraCaptureUI استفاده کنیم و عکس/فیلم بگیریم باید دو فضای نامی زیر رو اضافه کنیم: using Windows.Media.Capture; using Windows.Storage; کلاس CameraCaptureUI یک پراپرتی با نام PhotoSettings داره که می تونید باهاش تنظیمات اولیه مانند سایز و فرمت عکس رو تعیین کنید. خب هر تصویری هم که گرفته میشه لازمه ذخیره بشه. قبلا باید دسترسی ها رو ایجاد کرده باشید. CameraCaptureUI captureUI = new CameraCaptureUI(); captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; captureUI.PhotoSettings.CroppedSizeInPixels = new Size(200, 200); StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); if (photo == null) { return; } خب تموم شد! باورتون میشه؟ کافیه هر جا که دوربین رو می خواهید متد بالا رو صدا بزنید تا یا UI استاندارد ویندوز بتونید یه عکس بگیرید!
  17. چون در دروس پیشین به بررسی کنترل های XAML پرداخته بودیم، در این درس نیز به چند کنترل دیگر می پردازیم تا با کنترل های بیشتر آشنا شوید. در این درس با کنترل های زیر آَشنا خواهید شد: ScrollViewer Ellipse FlipView MediaElement AppBar و CommandBar Slider ProgressBar پروژه جدید یکپارچه ای به نام WN XAML Controls ایجاد و MainPage.xaml را باز کنید. پس از ایجاد پروژه، 5 عکس را در رایانه خود به نام های زیر تغییر نام دهید: Image1.jpg Image2.jpg Image3.jpg Image4.jpg Image5.jpg نکته: تمامی حروف به صورت کوچک نوشته شود! پس از آن، در پنجره Solution Explorer روی پروژه راست کلیک کنید و روی Add کلیک کرده و در آخر گزینه Existing Item… را انتخاب کنید. سپس پنجره ای برای شما باز می شود که باید عکس هایی که تغییر نام دادید را انتخاب کرده و روی Add کلیک کنید تا به پروژه شما اضافه شود. پس از آن عکس ها به پروژه شما اضافه خواهد شد: نکته: این عکس ها در این پروژه به کار برده خواهند شد. ScrollViewer کنترلی است که برای اسکرول کردن به کار می رود، به صورت پیشفرض همه ی کنترل ها تنظیمات اسکرول را دارا هستند اما به دلایلی کار نمی کنند. برای همین برای اسکرول، بهتر است کنترل Layoutـی که می خواهیم را درون یک ScrollViewer قرار دهیم تا کنترل های درون آن قابل اسکرول شوند. کنترل ScrollViewerـی درون گرید اصلی صفحه قرار داده و درون آن یک کنترل دیگر Grid قرار دهید. نکته: کنترل ScrollViewer فقط می تواند یک کنترل را درون خود جای دهد. پس اگر می خواهید چندین کنترل را دارای اسکرول کنید بهتر است درون یک کنترل Layout مانند StackPanel یا Grid آنها را قرار داده و سپس این Layout را درون ScrollViewer قرار دهید. ------------------------------------- Ellipse به معنای بیضی است، این کنترل می تواند عکس ها به صورت دایره یا بیضی به نمایش در آورد. چنانچه طول و عرض این کنترل برابر باشد، عکس یا رنگ به صورت بیضی در می آید اما اگر عرض و طول برابر نباشند به صورت بیضی در خواهد آمد. کنترل Ellipseـی به StackPanel اضافه کنید. (این کنترل را می توانید در قسمت All XAML Controls در پنجره Toolbox پیدا کنید.) <Ellipse Fill="#FFF4F4F5" Height="100" Stroke="Black" Width="100" /> خاصیت Fill این کنترل می تواند هم رنگ را بپذیرد هم عکس را. خاصیت Stroke در واقع هما دایره ای است که در برای لبه ها در نظر می گیرد. شما می توانید اندازه Stroke را با خاصیت StrokeThickness که از نوع عددی می باشد تغییر دهید. روی کنترل Ellipse کلیک کنید و به پنجره تنظیمات آن بروید. روی مثلث کوچک کنار Brush کلیک کنید تا تنظیمات مربوط به Brush برای شما به نمایش در آید، سپس روی آیکونی که در تصویر زیر مشخص شده است کلیک کنید تا بتوانید عکسی برای Ellipse انتخاب نمایید: پس از باز شدن تب مربوطه، روی مثلث سمت راست گزینه ImageSource کلیک کنید تا نام عکس های درون پروژه را به شما نشان دهد. روی اولی یعنی image1.jpg کلیک کنید تا این عکس به عنوان عکس بیضی ما در نظر گرفته شود: اکنون کدهای XAML مربوط به بیضی به صورت زیر خواهد بود: <Ellipse Height="100" Stroke="Black" Width="100"> <Ellipse.Fill> <ImageBrush Stretch="Fill" ImageSource="image1.jpg" /> </Ellipse.Fill> </Ellipse> ------------------------------------- FlipView از این کنترل برای نمایش عکس ها یا آیتم های یک لیست استفاده می شود، مانند عکس های درون یک آلبوم یا آیتم های یک محصول. برای دستگاه های لمسی، swipe(کشیدن به سمت چپ یا راست و یا بالا یا پایین) برای تغییر آیتم این کنترل استفاده می شود. برای دستگاه هایی که موس دارند، برای تغییر آیتم چنانچه موس را بر روی این کنترل بگیریم دکمه های بعدی و قبلی به نمایش در می آیند. برای کیبورد نیز از دکمه های چپ و راست یا بالا و پایین استفاده می شود. شاید برای شما سوال پیش آید که این کنترل چگونه به نمایش در خواهد آمد. در اینجا چند عکس برای روشن تر شدن این کنترل برای نشان داده شده است: همانطور که از عکس سوم و پنجم پیداست، این کنترل در استور مایکروسافت و نرم افزار DL Music به عنوان اسلایدشو به کار برده شده است. کنترل FlipView را به StackPanel اضافه کنید.(این کنترل را می توانید در قسمت All XAML Controls در پنجره Toolbox پیدا کنید.) اندازه ارتفاع این کنترل را برابر با 200 قرار دهید. <FlipView x:Name="flipView" Height="200"> </FlipView> این کنترل نیز مانند باقی کنترل های Layout دارای خواص Children است که می تواند کنترل های دیگر را درون خود جای دهد. در اینجا ما پنج کنترل Image را درون آن قرار می دهیم و عکس هایی که به پروژه اضافه کردیم را به کنترل های Image میدهیم: <FlipView x:Name="flipView" Height="200"> <Image Source="/image1.jpg" Stretch="Fill" /> <Image Source="/image2.jpg" Stretch="Fill" /> <Image Source="/image3.jpg" Stretch="Fill" /> <Image Source="/image4.jpg" Stretch="Fill" /> <Image Source="/image5.jpg" Stretch="Fill" /> </FlipView> نکته: برای افقی یا عمودی کردن FlipView باید کد زیر را به FlipView اضافه کنیم.(به صورت پیشفرض FlipView افقی می باشد.) <FlipView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Vertical" /> </ItemsPanelTemplate> </FlipView.ItemsPanel> خاصیت Orientation می تواند به صورت Vertical(عمودی) یا Horizontal(افقی) در آید. در این درس می خواهیم به صورت افقی باشد پس آنرا برابر با Horizontal قرار میدهیم. تمامی کدهای FlipView شما باید به صورت زیر باشد: <FlipView x:Name="flipView" Height="150"> <FlipView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </FlipView.ItemsPanel> <Image Source="/image1.jpg" Stretch="Fill" /> <Image Source="/image2.jpg" Stretch="Fill" /> <Image Source="/image3.jpg" Stretch="Fill" /> <Image Source="/image4.jpg" Stretch="Fill" /> <Image Source="/image5.jpg" Stretch="Fill" /> </FlipView> ------------------------------------- MediaElement با استفاده از این کنترل می توانید موزیک و ویدیو را در برنامه های یکپارچه پخش نمایید. شما می توانید دکمه های این کنترل (Play,Pause,Next,Previousو...) را تغییر دهید یا اینکه پس زمینه کنترل ها را تغییر دهید. این کنترل نیز مانند باقی کنترل ها دارای خواصی است که در اینجا به چند مورد آن اشاره خواهیم کرد. Source با استفاده از این خاصیت می توانید Uriـه فایلی که می خواهید(چه در اینترنت، چه در خود پروژه) را پخش نمایید. نکته: برای اینکه بتوانید از اینترنت فایلی را پخش کنید باید در Package.appxmanifest تعیین کنید که برنامه به اینترنت دسترسی داشته باشد. به صورت پیشفرض این دسترسی برای هر پروژه ای که ایجاد می کنیم داده میشود. برای پخش فایل از طریق فایل های محلی مانند فایل های درون موبایل یا رایانه باید از تابع SetSource استفاده کنید. این تابع دارای دو پارامتر ورودی است که اولی از نوع IRandomAccessStream است و دومی نیز MimeTypeـه فایل را تعیین میکند.(فعلا به همینجا اکتفا کنید، در دروس آینده نمونه هایی برای پخش فایل های محلی زده خواهد شد.) AutoPlay خاصیتی از نوع بولین هاست، می تواند true یا false باشد. به صورت پیشفرض true است. این خاصیت تعیین می کند که پس از دادن Sourceـه جدید خودکار آنرا پخش کند. چنانچه این فایل حجیم باشد یا از اینترنت باشد و سرعت اینترنت کاربر پایین باشد، پس از دادن Sourceـه فایل صوتی یا تصویری، اگر تعیین نکنیم که این خاصیت false باشد، ممکن است نتواند فایل را پخش کند. AreTransportControlsEnabled خاصیتی است که تعیین می کند کنترل های پلیر را به نمایش در آورد. این خاصیت از نوع بولین هاست. به صورت پیشفرض برابر با false است. این خاصیت می تواند Play, Pause,Stop، تنظیم میزان بلندی صدا، قطع صدا، نمایش پروسه پخش، جلو یا عقب زدن فیلم و... را به نمایش در آورد. پس چنانچه می خواهیم کنترل ها به نمایش در آیند باید این خاصیت را برابر با true قرار دهید. Stretch دریافت یا تنظیم اینکه MediaElement چگونه کشیده شود. این خاصیت می تواند یکی از مقادیر None, Uniform, UniformToFill, Fill را داشته باشد. Balance دریافت یا تنظیم نسبت حجم صدا در بلندگوهای استریو. (از منفی یک تا مثبت یک) به صورت پیشفرض روی صفر می باشد. این میزان تنظیم می کند که در بلندگوی سمت راست صدا بیشتر پخش شود یا در بلندگوی سمت چپ یا اینکه در هر دو به اندازه پخش شود(یعنی صفر). CanPause دریافت اینکه ویدیو یا موزیک ما می تواند Pause(متوقف) شود یا خیر، این مقدار از نوع بولین هاست. نکته: این خاصیت به صورت ReadOnly می باشد یعنی فقط خواندنی است. CanSeek دریافت اینکه آیا ویدیو یا موزیک ما می تواند جلو-عقب شود یا خیر. این مقدار از نوع بولین هاست. نکته: این خاصیت به صورت ReadOnly می باشد یعنی فقط خواندنی است. CurrentState تعیین می کند که پخش در چه مرحله ای قرار دارد. این خاصیت یکی از موارد Closed, Opening, Buffering, Playing, Paused, Stopped را تعیین می کند. نکته: این خاصیت به صورت ReadOnly می باشد یعنی فقط خواندنی است. IsAutioOnly خاصیتی از نوع بولین که فقط خواندنی است. تعیین می کند که آیا فایل در حال پخش فقط موزیک است یا خیر. IsFullWindow تعیین می کند که آیا MediaElement در حالت تمام صفحه است یا خیر. با استفاده از این گزینه می توانید تعیین کنید که فیلم در کدام حالت باشد. این خاصیت از نوع بولین هاست. IsLooping تعیین می کند که فایل پخش ما می تواند پس از اتمام دوباره پخش شود یا خیر. شما می توانید این گزینه که از نوع بولین هاست به true تغییر دهید تا پس از هربار اتمام پخش، فایل ویدیویی یا موزیک دوباره شروع به پخش شود. IsMuted تعیین می کند که آیا صدای فیلم یا موزیک قطع شود یا خیر. این خاصیت از نوع بولین هاست. NaturalDuration که از نوع Duration است تعیین می کند که زمان فیلم چقدر است. این خاصیت فقط خواندنی است. Position تعیین کنید که مکان فعلی فیلم در کجا باشد(برای جلو و عقب زدن فیلم یا موزیک) این خاصیت از نوع TimeSpan می باشد. Volume این خاصیت میزان صدا را تعیین می کند. از نوع عددی است و می تواند از صفر تا یک باشد. اعداد اعشاری نیز می تواند باشد. به صورت پیشفرض 0.5 است. کد زیر را به StackPanel برنامه اضافه کنید: <MediaElement x:Name="mediaElement" Height="200" AutoPlay="False" Source="http://dl.nex1music.ir/1395/03/03/Meysam%20Ebrahimi%20-%20Doost%20Daramet.mp3" AreTransportControlsEnabled="True" /> ------------------------------------- AppBar و CommandBar Command bars (همچنین app bars نیز خوانده می شود) به کاربران دسترسی آسان کارهای مهم برنامه شما را ارائه می دهند و می توانند به عنوان دستورات یا تنظیماتی مانند انتخاب عکس، تغییر عکس، ذخیره و... مورد استفاده قرار گیرند. نمونه ها: در برنامه Photos: در نرم افزار Outlook Calendar: آناتومی یا ساختار: به صورت پیشفرض، Command bar ردیفی از دکمه های آیکونی و یک تنظیماتی به عنوان "نمایش بیشتر" را نشان می دهد، که تنظیمات بیشتر با سه بیضی [•••] مشخص می شوند. نمونه: ساختار یک CommandBar به صورت زیر است: همانطور که در عکس بالا مشخص شده است، سه ناحیه برای تعیین کنترل ها وجود دارد. ناحیه Content در سمت چپ قرار می گیرد. اگر در این قسمت کنترلی قرار دهیم این ناحیه به نمایش در می آید. ناحیه PrimaryCommands در سمت راست ناحیه قبلی قرار می گیرد. چنانچه کنترلی قرار دهیم دکمه "نمایش بیشتر" [•••] به نمایش در خواهد آمد. ناحیه SecondaryCommands نیز زمانی به نمایش در می آید که روی دکمه "نمایش بیشتر" کلیک شود. کد XAML برای تصویر بالا: <CommandBar> <AppBarToggleButton Icon="Shuffle" Label="Shuffle" /> <AppBarToggleButton Icon="RepeatAll" Label="Repeat"/> <AppBarSeparator /> <AppBarButton Icon="Back" Label="Back" /> <AppBarButton Icon="Stop" Label="Stop" /> <AppBarButton Icon="Play" Label="Play" /> <AppBarButton Icon="Forward" Label="Forward" /> <CommandBar.SecondaryCommands> <AppBarButton Icon="Like" Label="Like" /> <AppBarButton Icon="Dislike" Label="Dislike" /> </CommandBar.SecondaryCommands> <CommandBar.Content> <TextBlock Text="Now playing..." Margin="12,14" /> </CommandBar.Content> </CommandBar> این کد را درون StackPanel برنامه قرار دهید. ------------------------------------- Slider اجازه می دهد کاربر طیفی وسیعی از اعداد را با حرکت انگشت مسیر حرکت آنرا تعیین کند. این کنترل می تواند به صورت عمودی و افقی باشد. Value میزان فعلی را بر اساس اعداد اعشاری تعیین می کند. Minimum کوچکترین عددی که اسلایدر می توان داشته باشد را تعیین می کند. Maximum بزرگترین عددی که اسلایدر می تواند داشته باشد را تعیین می کند. Orientation افقی یا عمودی بودن اسلایدر را تعیین می کند. کد زیر را به StackPanel برنامه اضافه کنید: <Slider x:Name="slider" Minimum="0" Value="50" Maximum="100" /> ------------------------------------- ProgressBar این کنترل برای نمایش پروسه کاری است. مثلا می خواهید به کاربر میزان کاری را نمایش دهید. ProgressBar نیز مانند Slider دارای مقادیر زیر است: Value میزان فعلی را بر اساس اعداد اعشاری تعیین می کند. Minimum کوچکترین عددی که پروسه می توان داشته باشد را تعیین می کند. Maximum بزرگترین عددی که پروسه می تواند داشته باشد را تعیین می کند. به صورت پیشفرض ProgressBar به صورت زیر است: چنانچه می خواهید به صورت زیر در آید کافی است IsIndeterminate را برابر با True قرار دهید: برای اینکه بتوانید به پروسه انجام کاری را به صورت زیر انجام دهید: باید از کنترل ProgressRing استفاده کنید. که برای این که حلقه پروسه بچرخد باید خاصیت IsActive این کنترل را روی True قرار دهید. کدهای XAML زیر را به StackPanel اضافه کنید: <ProgressBar Minimum="0" Value="50" Maximum="100" Margin="2" /> <ProgressBar IsIndeterminate="True" Height="10"/> <ProgressRing IsActive="True" /> اکنون نرم افزار شما باید به صورت زیر باشد: کتاب الکترونیک + پروژه این درس پیوست شد. این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Windows 10 Introduction S01E05.pdf WN XAML Controls.zip
  18. متاسفانه، پادگان ما از 24 ساعت نگهبانی و 24 ساعت خروج، به چهار روز نگهبانی و یک روز خروج تغییر پیدا کرده است، پس متاسفانه ممکن است در نگارش آموزش ها کمی تاخیر بیافتد. بابت این موضوع از شما عذرخواهی می کنم. امیدوارم این موضوع باعث دلسردی شما نشود. در دروس پیشین با همدیگر برنامه HelloWorld را ایجاد کردیم و در مورد آن بحث کردیم. سپس درباره XAML و ارتباط آن با کلاس سی شارپ یاد گرفتیم، در آخر نیز توضیحاتی راجع به کنترل Grid که می تواند دارای ردیف، ستون باشد و می تواند هر تعداد کنترلی که می خواهیم را در خود جای دهد. در این درس به باقی کنترل های XAML می پردازیم تا با نحوه کارکرد آنها بیشتر آشنا شویم. کنترل های رایج XAML یا Common XAML Controls کنترل های رایج XAML 24 عدد هستند که هر کدام برای کار خاصی ساخته شده اند. در زیر به معرفی آنها ابتدا می پردازیم و در ادامه برای آنها مثال خواهیم زد. Border بُردر Button کنترل دکمه، این کنترل برای ساخت دکمه های برنامه به کار می رود. معمولا مستطیل شکل هستند. معمولا btn مخفف دکمه است. CheckBox جعبه انتخابی، برای قرار دادن چندین گزینه برای انتخاب گذاشته می شود. پیشوند Chk. ComboBox جعبه ترکیبی، شامل لیستی که می توان یکی از آن را انتخاب نمود. DatePicker انتخاب کننده تاریخ FlipView کنترلی برای ساخت اسلاید شو ها Flyout پنلی Panel که می تواند کنترل ها را در خود جای دهد و هنگامی که باز شود چنانچه روی باقی صفحه که این کنترل وجود ندارد کلیک شود، این کنترل پنهان می شود. Grid کنترل گرید پُرکاربرد ترین کنترل در XAML است، این کنترل توانایی داشتن هر نوع کنترلی را در خود دارد. GridView کنترلی مانند ListView است با این تفاوت که این کنترل، کنترل ها را به صورت افقی در خود قرار می دهد اما در لیست ویو کنترل ها به صورت عمودی در لیست قرار می گیرند. Hub این کنترل به شما اجازه می دهد که برنامه خود را سازماندهی کنید و در عین حال با دسته ها مرتبط باشد. Image کنترلی که می توانیم در آن تصاویرهایی که می خواهیم را به نمایش در آوریم. ListView کنترل ها به صورت لیستی عمودی در لیست ویو قرار می گیرند، معمولا برای نمایش لیست ها از ListView استفاده می شود. MenuFlyout پنل بازشونده منو، برای ساخت منو های برنامه برای یک کنترل خاص. Pivot کنترلی برای ساخت تب. PivotItem تب های کنترل Pivot از نوع PivotItem هستند. RadioButton دکمه رادیویی، برای انتخاب یک مورد خاص. Rectangle کنترلی نمایش رنگ، عکس و ... RelativePanel این کنترل در واقع برای هر عنصر(کنترل) دیگر محدودیتی ایجاد می کند که برای ساخت برنامه های واکنش گرا یا Responsive استفاده می گردد. روابط بین عناصر برای ساخت بهتر رابط کاربری یکی دیگر از امکانات این کنترل است. StackPanel کنترلی مانند StackPanel اما با این تفاوت که محدود تر از آن است. این کنترل می تواند اشیا را به صورت عمودی و افقی در خود جای دهد. SplitView این کنترل در واقع همان کنترلی است که برای ساخت منوی همبرگری استفاده میشود. این کنترل دارای دو Property به نام های SplitView.Pane و SplitView.Content است که به ترتیب اولی برای دکمه های منو و دومی برای نمایش صفحات برنامه است. TextBlock بلاک متنی، نمایش متون در این کنترل انجام پذیر است. TextBox جعبه متنی، این کنترل به کاربر توانایی نوشتن متن، ایمیل، تلفن و... را می دهد. MediaPlayer کنترلی که می تواند آهنگ، ویدیو یا تصاویر را پخش کند. در درس بعد، این کنترل ها را در برنامه به کار خواهیم برد تا بیشتر با مفاهیم کاربرد آنها آشنا شویم. کتاب الکترونیک (PDF) این آموزش پیوست شد. این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Windows 10 Introduction S01E03.pdf
  19. از امروز می خواهیم آموزش برنامه نویسی یکپارچه(UWP) را به زبان فارسی شروع کنیم. این آموزش ها بر پایه سی شارپ و XAML می باشد. توی کتاب پیشین که برای ویندوزفون 8.1 نوشته شده بود، سی شارپ نیز آموزش داده بودم برای همین هم توی این کتاب سی شارپ آموزش داده نمیشه و فرض بنده بر این هست که شما تا حدودی با سی شارپ آشنایی دارید و می توانید کدهای نوشته شده آنرا بخوانید و درک کنید. البته بعضی از کدها توضیح دار خواهند بود. اهداف ما بر این است که برنامه نویس های جامعه ویندوزی را افزایش دهیم. اگر مشکلی پیش نیاید، آموزش ها هفتگی یا حداکثر هر ماه به روز رسانی می شوند. امیدوارم با ما همراه باشید... Universal Windows Platform یا به اختصار UWP به معنای پلتفرم یکپارچه ویندوز است، یکپارچه شدن کدها و نوشتن یکبار کد و خروجی گرفتن از آن برای ویندوز و ویندوز فون از زمان ویندوز و ویندوز فون 8.1 شروع شد، در پروژه یکپارچه ویندوز/فون 8.1 که به WinRT نیز معروف است، هنگامی که یک راه حل ایجاد میکردیم سه پروژه ایجاد میشد، یکی ویندوزی، یکی ویندوزفونی و دیگری نیز پروژه ای به نام Shared یا مشترک بود که اگر کد، عکس یا فایل، صفحه جدیدی را در پروژه Shared ایجاد می کردیم در هر دو پروژه قابل استفاده بودند، همچنین نیز می توانستیم برای هر کدام در پروژه های خود(پروژه ویندوزی یا ویندوزفونی) کدهایی را بنویسیم که فقط میشود در همان پروژه استفاده کرد. بدی پروژه های یکپارچه ویندوز/فون 8.1 این بود که بعضی از کدها در ویندوز وجود داشت و در ویندوزفون نمیتوانستیم از آن استفاده کنیم و همچنین بعضی از کدها در ویندوزفون قابل استفاده بود و در ویندوز قابل استفاده نبود و باعث دوگانگی کدنویسی برای ویندوز و ویندوزفون میشد. اما در ویندوز 10 مایکروسافت همه کدها را یکی کرده است، هنگامی که یک راه حل جدید برای ویندوز یکپارچه توسط ویژوال استودیو ایجاد می کنیم، فقط یک پروژه در آن ایجاد می شود که قابل اجرا بر روی هر دستگاهی که از سیستم عامل ویندوز 10 استفاده می کند، می باشد. یک بار کدنویسی را انجام میدهیم و در هر دستگاهی برنامه ـمان را اجرا می کنیم. پایه و اساس کدهای UWP نیز همان WinRT است، پس نمی توانیم از Silverlight که در ویندوزفون 8.0 و 8.1 نیز وجود داشتند استفاده کنیم. نرم افزاری که ما در اینجا از آن استفاده می کنیم ویژوال استودیو 2015 نسخه Community به روز رسانی دوم می باشد. دانلود نسخه های مختلف ویژوال استودیو 2015 به همراه آپدیت دوم: دانلود ویژوال استودیو 2015 نسخه Community به همراه آپدیت دوم | حجم: 6.95 گیگابایت دانلود ویژوال استودیو 2015 نسخه Professional به همراه آپدیت دوم | حجم: 7.04 گیگابایت دانلود ویژال استودیو 2015 نسخه Enterprise به همراه آپدیت دوم | حجم: 7.08 گیگابایت نکته: در هنگام نصب ویژوال استودیو ممکن است به اینترنت نیاز داشته باشید، پس حداقل حجم اینترنت 2 گیگابایت داشته باشید تا در هنگام نصب به مشکل برنخورید. نکته: این آموزش ها بر پایه ویژوال استودیو 2015 نسخه Community به روز رسانی دوم می باشد. نکته: ویندوز رایانه شما حتما حداقل باید ویندوز 10 نسخه 10240 یا بالاتر باشد. نکته: اگر می خواهید شبیه ساز ویندوز 10 موبایل روی کامپیوتر شما نصب شود، حداقل رم کامپیوتر شما باید 4 گیگابایت یا بالاتر باشد. نکته: برای نصب شبیه ساز یا Emulator نیاز به فعال سازی Hyper-V دارید. نکته: چنانچه رم کامپیوتر شما کمتر از 4 گیگابایت است، نگران نباشید، تنها نیاز دارید که یک موبایل ویندوز 10ـی داشته باشید(فرقی نمی کنید Insider باشد یا رسمی) تا به صورت مستقیم از ویژوال استودیو برنامه را در گوشی خود با کابل USB اجرا کنید. آموزش نصب ویژوال استودیو 2015 و نصب SDK ویندوز 10 پس از دانلود فایل ISO مربوط به ویژوال استودیو آنرا با استفاده از نرم افزارهای فشرده سازی مانند WinRAR آنرا Extract کنید: پس از Extract با این روبه رو می شوید: فایل vs_community.exe را اجرا کنید(در نسخه های دیگر vs_enterprise.exe یا vs_professional.exe خواهد بود). چنانچه به اینترنت دسترسی نداشته باشید با این تصویر روبه رو می شوید: چنانچه روی Continue کلیک کنید می توانید به صفحه بعدی نصب بروید، اما پیشنهاد می شود به اینترنت وصل شوید و روی Retry کلیک کنید. پس از انجام این کار با این صفحه مواجه میشوید: ویژوال استودیو از شما می خواهد مسیری را برای آن انتخاب کنید به صورت پیشفرض در تصویر معلوم است که چه مسیری را انتخاب کرده است. نوع نصب را ما باید Custom انتخاب کنیم تا بتوانیم هر چیزی را که می خواهیم نصاب برایمان نصب کند و هر چیزی که نمی خواهیم را نصب نکند. پس از کلیک بر روی Custom در قسمت Choose the type of installation روی Next کلیک کنید. همانطور که تصویر بالا می بینید فقط نیاز است مورد زیر را تیک بزنید: Universal Windows App Development Tools که خودکار موارد زیر را برای شما تیک میزند: Tools (1.3) and Windows 10 SDK (10.10586) Windows 10 SDK (10.010240) اگر این موارد تیک نداشت آنها را تیک بزنید، در تصویر بالا چون من برای ویندوز/فون 8.1 و ASP هم برنامه نویسی میکنم دو گزینه زیر نیز تیک خورده اند: Microsoft Web Developer Tools Windows 8.1 and Windows Phone 8.0/8.1 Tools ویژوال استودیو در زیر صفحه برای شما می نویسد که چه فضای آزادی در پارتیشن برای نصب نیاز دارد. مثلا در تصویر بالا 23 گیگابایت برای نصب نیاز دارد. روی Next کلیک کنید تا با تصویر زیر مواجه شوید: مواردی که می خواهد نصب کند را برای شما نشان می دهد، روی Install کلیک کنید. پس از اتمام نصب ویژوال استودیو آنرا را اجرا کنید، در اولین اجرا تصویری مانند تصویر زیر را نشان می دهد (نکته چون من یادم رفته بود از این قسمت عکس بگیرم، دو عکس زیر مربوط به نصب ویژوال استودیو 2013 است، اما در این قسمت چندان تفاوتی ندارند) ویژوال استودیو از شما می خواهد که به حساب مایکروسافت خود وصل شوید، نیازی نیست که حتما به حساب خود وصل شوید، اگه می خواهید به ویژوال استودیو حساب خود را دهید روی Sign In کلیک کنید، در غیر اینصورت زیر Not now, maybe later کلیک کنید تا این صفحه را نادیده بگیرد.) صفحه بعدی: از شما می خواهد زبان پیشفرض پروژه ها و پوسته ویژوال استودیو را انتخاب کنید، در قسمت Development Settings گزینه Visual C# را انتخاب کنید، من چون پوسته تاریک ویژوال استودیو را بیشتر می پسندم گزینه Dark را در انتخاب پوسته، انتخاب می کنم. در آخر روی Start Visual Studio کلیک کنید تا تنظیماتی را برای شما انجام دهد و سپس ویژوال استودیو را برای شما باز کند. آنلاک کردن موبایل یا کامپیوتر برای نصب و اجرای برنامه ها برای آنلاک کردن موبایل یا کامپیوتر به Settings بروید، سپس به Update & security رفته و گزینه For developers را انتخاب کنید. پس از باز شدن این قسمت گزینه Developer mode را تیک بزنید. به همین راحتی موبایل یا کامپیوتر ویندوز 10یی شما آنلاک شد. ساخت اولین پروژه یکپارچه ویژوال استودیو را باز کنید و پروژه جدید Windows Universalـی به نام Hello World ایجاد کنید.(طبق شماره ها پیش بروید) پس از ایجاد پروژه ویژوال استودیو از شما می خواهد که نسخه ویندوز 10 ای که می خواهید برای آن برنامه نویسی کنید و کمترین نسخه ای که برنامه شما می تواند روی آن اجرا شود را انتخاب کنید. در اینجا هر دو را روی نسخه 10240 قرار میدهیم و روی OK کلیک میکنیم: صفحه اولی که بعد از آن نشان می دهد این است. کلاس App.xaml.cs برای شما به صورت پیشفرض هر بار که پروژه جدیدی ایجاد کنید باز خواهد شد. در این کلاس می توانید تعیین کنید که کدام صفحه، صفحه اول برنامه شما باشد، تعیین کنید که برنامه بتواند از بیرون و با استفاده از OpenWith فرمتی را با استفاده از برنامه شما باز کند و خیلی کارهای دیگر... . کلاس App.xaml.cs را ببندید و روی MainPage.xaml در پنجره راه حل دو بار کلیک کنید تا صفحه طراحی آن باز شود: چنانچه مانند تصویر بالا خطای بالا را مشاهده کردید روی گزینه اول یعنی Click here to reload the designer کلیک کنید، اگر دوباره این خطا را نشان داد روی مورد دوم کلیک کنید، اگر باز هم این اتفاق افتاد، صفحه را ببندید و دوباره باز کنید، اگر باز هم این خطا را مشاهده نمودید ویژوال استودیو را ببندید و دوباره آنرا باز کنید، سپس پروژه را باز کرده و روی MainPage.xaml کلیک کنید تا با این صفحه رو به رو شوید: روی Toolbox کلیک کنید تا پنجره آن باز شود، سپس مانند عکس روی شماره 2 که مشخص شده است کلیک کنید: تا همیشه پنجره Toolbox باز باشد: حال از Toolbox روی کنترل دکمه (Button) ـی یکبار کلیک کرده و آنرا بکشید و روی صفحه طراحی قسمت سفید رنگ رها کنید: کد زیر که XAML است به صورت خودکار برای این دکمه نوشته شد: <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="161,255,0,0" VerticalAlignment="Top" /> حال مقدار Content که در واقع متن این دکمه است را از پنجره تنظیمات به Click here! تغییر دهید: یا به سادگی از در قست XAML آنرا تغییر دهید: <Button x:Name="button" Content="Click here!" HorizontalAlignment="Left" Margin="161,255,0,0" VerticalAlignment="Top" /> نکته اگر قسمت کدهای XAML شما به مرتبی عکس بالا نیست، کافی است روی منو Tools ویژوال استودیو کلیک کنید و گزینه Settings را انتخاب کنید: سپس روی مثلث کوچک کنار Text Editor در قسمت سمت چپ کلیک کنید و به دنبال XAML بگردید و روی مثلث کنار آن نیز کلیک کنید و سپس روی مثلث کنار Formatting نیز کلیک کرده و گزینه Spacing را انتخاب کنید. در قسمت سمت راست گزینه Position each attribute on between attributes را انتخاب کنید و گزینه زیر آن یعنی Position firs attribute on same line as start tag را نیز تیک بزنید و روی OK کلیک کنید. اکنون در قسمت XAML دکمه های Ctrl+A را بزنید و Ctrl+X را بزنید و در آخر Ctrl+V بزنید (یعنی کدها را Cut کرده و سپس Paste کنید). به همین راحتی! برگردیم به آموزش، حال روی دکمه دو بار کلیک کنید یا در پنجره تنظیمات مربوط به آن روی علامت رعد کلیک کنید تا رویداد ها را ببینید زیرا می خواهیم رویداد Click دکمه را بسازیم: حال روی جعبه متنی روبه روی Click دوبار کلیک کنید تا رویداد کلیک برای آن ایجاد شود: پس از این کار خودکار تابع رویداد Click دکمه button در صفحه MainPage.xaml.cs برای شما ساخته می شود، همچنین این صفحه به صورت خودکار برایتان باز می شود و اولین خط این تابع انتخاب شده است را به شما نشان می دهد: حال کد زیر را بنویسید: اگر به تصویر بالا نگاه کنید، می بینید که MessageDialog به رنگ سفید در آمده است و زیر آن یک خط قرمز رنگ کشیده شده است، به خاطر این است که فظای نامی مربوط به آن به صفحه اضافه نشده است، در سمت چپ تصویر در خط MessageDialog… یک آیکون چراغ وجود دارد، چند ثانیه موس را روی آن بگیرید تا مثلث کوچکی در سمت راست آن ظاهر شود، روی آن مثلث کلیک کنید و سپس اولین گزینه یعنی using Windows.UI.Popups; را انتخاب کنید تا فضای نامی MessageDialog به صفحه اضافه شود: پس از این کار، رنگ MessageDialog ها باید به رنگ سبز در آیند: حال باقی کد را زیر آن بنویسید: await md.ShowAsync(); زمانی که این کد را بنویسید، همانند کد MessageDialog خطایی دریافت خواهید کرد: اما این خطا مربوط فضای نامی نیست، این خطا مربوط به استفاده از کلمه کلیدی await است، برای استفاده از این کلمه کلیدی باید در تعریف تابع کلمه کلیدی async را به کار ببریم. برای اضافه کردن کلمه کلیدی async می توانیم آنرا پیش از تعریف تابع (قبل یا بعد از private یا public) بنویسیم، یا اینکه روی آیکون چراغ اول خط چند ثانیه موس را بگیریم و اولین گزینه یعنی Make the containing scope ‘async’. را انتخاب کنیم: که این گونه خواهد شد: پس کل کدهای شما باید اینگونه باشد: private async void button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { string text = "Hello world!" + Environment.NewLine + "Powered by Win Nevis"; MessageDialog md = new MessageDialog(text); await md.ShowAsync(); } یا: async private void button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { string text = "Hello world!" + Environment.NewLine + "Powered by Win Nevis"; MessageDialog md = new MessageDialog(text); await md.ShowAsync(); } حال وقت اجرای برنامه است، روی Local machine در نوار ابزار کلیک کنید تا برنامه اجرا شود( یا از منو ویژوال استودیو، گزینه DEBUG را انتخاب کرده و روی Start Debugging کلیک کنید): این کار باعث می شود برنامه روی هر معماری که است اجرا شود، در اینجا x86 انتخاب شده است پس در خود کامپیوتر برنامه ما اجرا می شود: اگر روی Click here! کلیک پیغامی به ما نشان میدهد: به همین سادگی اولین برنامه یکپارچه خود را نوشتیم! اگر می خواهید برنامه را روی موبایل خود اجرا کنید، کافی است روی مثلث کوچک کنار x86 کلید کنید و گزینه ARM را انتخاب کنید، سپس موبایل خود را با کابل USB به کامپیوتر وصل کنید و صفحه آنرا باز کنید(نگذارید صفحه خاموش یا قفل شود) حال روی Device کلیک کنید تا برنامه مستقیما از ویژوال استودیو روی موبایل ویندوز 10یی خود اجرا شود: پس از اجرا در موبایل: این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . کتاب الکترونیک (PDF) این آموزش پیوست شد. سورس کد این پروژه پیوست شد. منبع: وین نویس Windows 10 Introduction S01E01.pdf Hello World.zip
  20. در اینجا می توانید لینک آموزش هایی که در انجمن قرار داده اید را بگذارید تا به لیست اضافه شود. این کار برای پیدا کردن آسان آموزش های انجمن برای کاربران می باشد. لیست آموزش های انجمن: حذف تگ های HTML حذف Attribute در HTML Parse کردن یک خبر خوان وردپرسی برای ویندوزفون و سیلورلایت غیر فعال کردن خاموش شدن صفحه به صورت خودکار در ویندوزفون 8.1 Status Bar در ویندوزفون 8.1 استفاده از فونت دلخواه ایجاد انیمیشن با Blend در ویندوز فون ذخیره و بازیابی داده های برنامه در ویندوزفون 8.1 پخش موزیک در پس زمینه در ویندوزفون 8.1 لاگین شدن و لاگین ماندن در سایت ها در ویندوزفون 8.1 ساخت کتاب در ویندوزفون 8.1 تارکردن عکس ها در ویندوزفون 8.1 محلی سازی نرم افزار ها(اضافه کردن زبان های مختلف) دو تکنیک در مورد application data