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

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



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

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

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

نوع محتوا


تالار ها

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

گروه


آدرس تارنما


یاهو


اسکایپ


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


شماره تماس


تلگرام


مکان


علایق


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

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

  1. سلام؛ چگونه می توانم از طریق کد نویسی یک هات اسپات ایجاد کنم؟! می خواهم یک هات اسپات دلخواه ایجاد کرده و یک روتر ایجاد کنم. اشتراک گذاری اینترنت مد نظرم نیست و تنها اتصال دستگاه ها و تبادل اطلاعات برایم مهم هست.
  2. c#

    بندع ی برنامه نویس مبتدی هستم و تازه سی شارپ رو شروع کردم.تو فرمی که ساختم متاسفانه وقتی اپ رو اجرا میکنم و پنجره رو بزرگ میکنم اجزای داخل فرم بهمراش بزرگ نمیشن و میرن ی گوشه کوچیک باقی میمونن.کمک لطفا
  3. سلام! قصد دارم وقتی برنامه اجراست، برخی از کارها توسط کیبورد صورت بگیره و به عبارتی با زدن کلیدی مانند بالا (Up) عملی خاص صورت بگیره. من طبق اسناد مایکروسافت پروژه ساخته و تست کردم، اما هنگام فشار کلیدهای کیبورد، رویداد keydown اجرا نمیشه! Microsoft Document, Keyboard Events private void grdMain_KeyDown(object sender, KeyRoutedEventArgs e) { switch (e.Key) { case VirtualKey.Up: break; case VirtualKey.Down: break; case VirtualKey.Left: break; case VirtualKey.Right: break; } } <Grid Name="grdMain" Loaded="grdMain_Loaded" KeyDown="grdMain_KeyDown" KeyUp="grdMain_KeyUp" Background="Red"> </Grid>
  4. c#

    با سلام، من میخواستم که در لاک اسکرین عدد یا اگه بشه متنی رو نشون بدم، چطور میتونم اون کار رو انجام بدم؟ توی سمپل های مایکروسافت یک سمپل در مورد این بود که از کدهاش سر در نیاوردم. حتی با سرچ کردن هم نتونستم این کار رو انجام بدم. (مثل اینکه اسمش LockScreen Badge Notification هست.)
  5. سلام؛ اگر شما هم با پنل GridView کار کرده باشید، حتما در نمایش آیتم ها در صفحات مختلف دچار مشکل فضای خالی در طرفین آیتم ها شدید. متاسفانه این کنترل به خوبی بهینه نشده و کاملا رسپانسیو عمل نمی کند. بنابراین باید از راه حلی دیگر این مشکل رو جبران کنیم تا آیتم ها تمام عرض پنل رو بپوشانند و فضای خالی آزار دهنده ای جلوی چشم مخاطب قرار نگیرد. اما حالا بریم سراغ توضیحات: ابتدا در xml کنترل گرید ویو، کدهای زیر رو اضافه می کنیم، تا عرض هر آیتم به اندازه فضای آزاد برسه: GridView.ItemContainerStyle> <Style TargetType="GridViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> </Style> </GridView.ItemContainerStyle> به این منظور باید در رویداد SizeChanged گرید ویو میزان عرض هر آیتم رو بصورت دستی تغییر بدیم. من برای این کار تعداد ستون هایی رو که می خوام در عرض صفحه میشه نمایش داد رو محاسبه می کنم و سپس این عرض "حداکثری" رو به آیتم ها می دم. من عرض حداکثری هر آیتم رو 850 انتخاب کردم: private void gvFave_SizeChanged(object sender, SizeChangedEventArgs e) { var columns = Math.Ceiling(ActualWidth / 850); ((ItemsWrapGrid)gvFave.ItemsPanelRoot).ItemWidth = e.NewSize.Width / columns; } به همین سادگی می تونید از شر فضای خالی راحت بشید. اگر سوالی بود در خدمتم. با تشکر
  6. سلام؛ من می خوام از فونت یکان، برای نمایش متون در وب ویو برنامه استفاده کنم. متاسفانه از هر روشی رفتم، موفق نشدم. این کلاسی هست که برای این کار نوشتم: class WebContentHelper { public static string HtmlHeader() //adapt parametres { var head = new StringBuilder(); head.Append("<head>"); head.Append("<meta name=\"viewport\" content=\"initial-scale=1, maximum-scale=1, user-scalable=0\"/>"); head.Append("<script type=\"text/javascript\">" + "document.documentElement.style.msScrollTranslation = 'vertical-to-horizontal';" + "</script>"); //horizontal scrolling //head.Append("<meta name=\"viewport\" content=\"width=720px\">"); head.Append("<style>"); head.Append("@font-face {" + "font-family: 'yekan'" + " url('/other/yekan.ttf') format('ttf');" + "}" + "h1, h2, h3, h4, h5, h6, p{font-family:yekan;}" + "p{font-size{15px;}" + "h1{font-size:25px;}"); head.Append("html { -ms-text-size-adjust:150%;}"); head.Append(string.Format("body {{background:white;color:black;font-size:15px;margin:20;padding:0;display: block;" + "height: 100%;" + "overflow-x: scroll;" + "position: relative;" + "width: 100%;" + "z-index: 0;}}" + "article{{column-fill: auto;column-gap: 80px;column-width: auto; column-height:100%; height:630px;" + "}}" + "img,p.object,iframe {{ max-width:100%; height:auto }}")); head.Append(string.Format("a {{color:blue}}")); head.Append("</style>"); // head.Append(NotifyScript); head.Append("</head>"); return head.ToString(); } public static string WrapHtml(string htmlSubString) { var html = new StringBuilder(); html.Append("<html>"); html.Append(HtmlHeader()); html.Append("<body><article class=\"content\">"); html.Append("<p dir=\"rtl\" align=\"right\">"); html.Append(htmlSubString); html.Append("</p>"); html.Append("</article></body>"); html.Append("</html>"); return html.ToString(); } } متن دلخواه رو باید به متد WrapHtml بدم و بعد در وب ویو به نمایش بذارم: string Content = WebContentHelper.WrapHtml(value); myView.NavigateToString(Content); نمیدونم مشکل چی هست!! اگر کسی عیبی در کدهای من می بینه بفرماید!!
  7. چطوری میشه از بنرهای تبلیغاتی مخصوص وب یا مخصوص اندروید (مثلا سایت عدد ، کلیک یاب ، ای نتورک و ...) در اپلیکیشن های یونیورسال استفاده کرد . اگر کسی چیزی در این مورد میدونه ، ممنون میشم آموزشش را در انجمن قرار بده .
  8. چارچوب XAML راه های بسیاری را به ما می دهند تا بتوانیم ظاهر برنامه هایمان را سفارشی سازی کنیم. استایل دادن به کنترل ها Style ها به شما اجازه می دهند که خواص کنترل ها را تنظیم کرده و از آن تنظیمات برای ظاهر چندین کنترل استفاده نماییم قالب های کنترل می توانید ساختار بصری و رفتار بصیری یک کنترل را با ساخت قالب برای کنترل هایتان در چارچوب XAML سفارشی سازی کنید. ResourceDictionary و منابع XAML توضیح می دهد که چگونه یک عنصر ResourceDictionary و منابع کلیدی تعریف می شود، و چگونه منابع XAML به باقی منابعی که شما تعریف کردید بخشی از برنامه یا پکیج برنامه شما باشد. منابع پوسته در XAML منابع پوسته ها در XAML مجموعه ای از تنظیمات منابعی است که مقادیر مختلفی را بسته به پوسته ای که در سیستم عامل فعال است، تعیین می کند. سه پوسته در چارچوب XAML پشتیبانی می شوند "تاریک" ، "روشن" ، "کنتراست بالا" | Dark, Light, HighContrast استایل کنترل ها شما می توانید ظاهر نرم افزار های خود را به روش های گوناگونی سفارشی سازی کنید. Style ها به شما اجازه می دهند که خواص کنترل ها را تنظیم کرده و از آن تنظیمات برای ظاهر چندین کنترل استفاده نماییم. شما یک قالب کنترل(Control Template) را زمانی ایجاد می کنید که می خواهید ساختار بصری و رفتار بصری کنترل را سفارشی سازی کنید. اصول پایه استایل دهی از استایل ها برای استخراج تنظیمات خواص بصری که می توانند دوباره استفاده مجدد شوند، استفاده می کنیم. در اینجا نمونه ای می زنیم که نشان می دهد سه دکمه با یک استایل که خواص BorderBrush، BorderThickness و Foreground برای آن تعیین شده است، استفاده می کنند. با اعمال یک استایل، شما می توانید کنترل هایی شبیه به هم ایجاد کنید بدون آنگه دوباره آن تنظیمات را برای هر کنترل به طور جداگانه تعیین کنید. شما می توانید یک استایل را به صورد درونی برای یک کنترل یا یک منبع قابل استفاده تعیین کنید. منابع می تواند در صفحه های XAML مورد نظرمان، درون صفحه App.xaml یا در صفحهات جداگانه که فایل XAMLـه ResourceDictionary نامیده می شوند تعریف کنید. یک فایل منبع دیکشنری XAML می تواند در سراسر برنامه به اشتراک گذاشته شود، بیش از یک منبع دیکشنری می تواند در یک برنامه ادغام شود. هر جایی که منبع تعریف شده است تعیین می کند که حوزه استفاده از آن چه محدوده ای داشته باشد. منابع سطع صحفه(درون یک صفحه XAML) فقط در همان صفحه ای که تعریف شده اند قابل استفاده است. اگر منابع با کلیدی که در App.xaml باشد درون صفحه همنام باشد، منبعی که درون صفحه، منبع درون App.xaml را بازنویسی می کند. اگر یک منبع در فایل های دیکشنری جداگانه ای تعریف شود، حوزه استفاده آن توسط جایی که این منبع به آن اشاره می کند، تعیین می شود. در تعریف استایل، شما نیاز به یک ویژگی به نام TargetType(نوع هدف)، و یک کالکشن از یک یا چندین عنصر Setter. ویژگی TargetType یک رشته است که FrameworkElementـی را برای اعمال در استایل مشخص می کند. مقدار TargetType باید از نوع یک FrameworkElement مشتق شده باشد که توسط Windows Runtime یا یک نوع سفارشی که درون برنامه تعریف شده و در دسترس است، باشد. اگر شما سعی کنید که یک استایل را برای یک کنترل اعمال کنید و نوع کنترل مورد نظر با ویژگی TargetType مطابقت نداشته باشد، یک استثنا(Exception) دریافت خواهید کرد. هر عنصر Setter دارای یک Property(خاصیت) و یک Value(مقدار) است. تنظیمات این خواص نشان می دهد که تنظیمات خواص کنترل و مقادیر آن خواص برای چه چیزی اعمال شده است. شما می تواند Setter.Value را با هر عنصر یا خاصیت عنصری تنظیم کنید. کد XAMLـی که اینجاست، استایل هایی که به دکمه ها در عکس پیشین اعمال شده بود را نشان می دهد. در این XAML، در ابتدا دو عنصر Setter در بدنه به عنوان ویژگی استفاده شده است، اما آخرین Setter، برای تعیین خاصیت BorderBrush در بدنه به عنوان عنصر استفاده شده است. در این نمونه از ویژگی x:Key که کلید استایل را تعیین می کند استفاده نشده است، پس استایل به صور ضمنی برای دکمه ها اعمال می شود. اعمال استایل های ضمنی درون بخش بعدی توضیح خواهد شد. <Page.Resources> <Style TargetType="Button"> <Setter Property="BorderThickness" Value="5" /> <Setter Property="Foreground" Value="Blue" /> <Setter Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="Yellow" Offset="0.0" /> <GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1.0" /> </LinearGradientBrush> </Setter.Value> </Setter> </Style> </Page.Resources> <StackPanel Orientation="Horizontal"> <Button Content="Button" /> <Button Content="Button" /> <Button Content="Button" /> </StackPanel> اعمال یک استایل ضمنی یا صریح اگر شما درون یک منبع استایلی را تعریف کنید، دو نوم راه برای اعمال آن برای کنترل خود دارید: · به صورت ضمنی، با تعیین فقط یک TargetType برای استایل. (یعنی کلیدی تعریف نکنید) · به صورت صریح، با مشخص کردن یک TargetType و یک ویژگی کلید x:Key برای استایل و سپس با تنظیم این استایل با استفاده از کد {StaticResource} و نام کلید جلوی آن. اگر استایلی دارای ویژگی x:Key باشد، شما می توانید فقط برای کنترل هایی که می خواهید این استایل را داشته باشند با تعیین کلید این استایل آنرا تنظیم و اعمال کنید. تضاد این موضوع، آن است که استایل را بدون ویژگی x:Key تعریف کیند تا به طور خودکار برای همه ی کنترل هایی که درون TargetTypeـه استایل تعیین شود که به صورت صریح تنظیمات استایل تعریف نشده است، اعمال شود. این دو دکمه نمونه ای از استایل ضمنی و صریح را نشان می دهند: در این مثال، اولین استایل دارای یک ویژگی x:Key است و TargetType آن برابر با Button است. اولین خاصیت استایل دکمه، به این کلید تنظیم شده است، پس این استایل از نوع صریح را اعمال کرده است. دومین استایل به صورت ضمنی برای دکمه دوم اعمال شده است چرا که TargetTypeـه آن برابر با Button است و استایل آن نیز بدون ویژگی x:Key است. <Page.Resources> <Style x:Key="PurpleStyle" TargetType="Button"> <Setter Property="FontFamily" Value="Lucida Sans Unicode" /> <Setter Property="FontStyle" Value="Italic" /> <Setter Property="FontSize" Value="14" /> <Setter Property="Foreground" Value="MediumOrchid" /> </Style> <Style TargetType="Button"> <Setter Property="FontFamily" Value="Lucida Sans Unicode" /> <Setter Property="FontStyle" Value="Italic" /> <Setter Property="FontSize" Value="14" /> <Setter Property="RenderTransform"> <Setter.Value> <RotateTransform Angle="25" /> </Setter.Value> </Setter> <Setter Property="BorderBrush" Value="Orange" /> <Setter Property="BorderThickness" Value="2" /> <Setter Property="Foreground" Value="Orange" /> </Style> </Page.Resources> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <Button Content="Button" Style="{StaticResource PurpleStyle}" /> <Button Content="Button" /> </StackPanel> استفاده از استایل Based-on(بر پایه...) برای آسانتر ساختن استایل ها و حف و بهینه سازی برای استفاده مجدد از آن ها، شما می توانید استایل ها طوری بسازید که یک استایل از استایل دیگری ارث بری کند. شما از خاصیت BasedOn برای ساخت استایل ارث بری استفاده خواهید کرد. استایل هایی که از استیل های دیگر ارث بری می کنند باید TargetTypeـه آن مثل کنترلی که می خواهیم، یا کنترلی که از آن مشتق شده است باشد. برای مثال، اگر پایه یک استایل بر اساس ContentControl باشد، استایل هایی که از این استایل ارث بری می کنند می توانند Target(مقصد)ـی از ContentControl یا انواعی از کنترل ها باشد از ContentControl مشتق شده اند مانند Button و ScrollViewer. اگر یک مقدار بر پایه استایلی تنظیم نشود، ار استایل پایه ارث بری خواهد کرد. برای تغییر یک مقدار از استایل پایه، استایل based-on آن مقدار را بازنویسی خواهد کرد. در مثال بعدی یک دکمه و یک CheckBox را که از استایل پایه ارث بری می کنند نشان می دهد. Targetـه استایل پایه ContentControl می باشد، و خاصیت های Height(ارتفاع)، و Width(عرض) را تنظیم می کند. استایل هایی که بر پایه این استایل هستند CheckBox و Button را مورد هدف قرار می دهند که از ContentControl مشتق شده اند. استایل های based-on رنگ های متفاوتی را برای خاصیت های BorderBrush و Foreground تنظیم می کنند.(شما به طور معمول یک بردر را اطراف یک CheckBox قرار نمی دهید. در اینجا ما این کار را انجام دادیم تا به شما تاثیرات استایل دهی را نشان دهیم.) <Page.Resources> <Style x:Key="BasicStyle" TargetType="ContentControl"> <Setter Property="Width" Value="130" /> <Setter Property="Height" Value="30" /> </Style> <Style x:Key="ButtonStyle" TargetType="Button" BasedOn="{StaticResource BasicStyle}"> <Setter Property="BorderBrush" Value="Orange" /> <Setter Property="BorderThickness" Value="2" /> <Setter Property="Foreground" Value="Red" /> </Style> <Style x:Key="CheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource BasicStyle}"> <Setter Property="BorderBrush" Value="Blue" /> <Setter Property="BorderThickness" Value="2" /> <Setter Property="Foreground" Value="Green" /> </Style> </Page.Resources> <StackPanel> <Button Content="Button" Style="{StaticResource ButtonStyle}" Margin="0,10" /> <CheckBox Content="CheckBox" Style="{StaticResource CheckBoxStyle}" /> </StackPanel> کتاب الکترونیک این درس پیوست شد. این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Windows 10 Introduction S01E06.pdf
  9. API موزیک استودیو پارسه نسخه 1.0.3 به روز رسانی شده در تاریخ 16 خرداد 1395 برابر 06/05/2016. شما می توانید این پروژه را در گیت هاب دنبال نمایید: https://github.com/ramtinak/ParseDevMusic این سرویس در حال حاضر برای تست ایجاد شده است. عکس هایی از پروژه نمونه: -------------- سرویس موزیک استدیو پارسه، کار را برای گرفتن اطلاعات از سایت های موزیک راحت می کند. با استفاده از این سرویس می توانید به راحتی برای سایت های موزیکی که میخواهید، نرم افزار بنویسید(فقط نام آن سایت را به ما معرفی کنید!) در حال حاضر این سرویس از 14 سایت پشتیبانی می کند. سایتهای فارس کیدز، فاز موزیک، ایران موزیک، نکس وان موزیک، موزیک ایرونی،پاپ موزیک، آهنگستان، پلی موزیک، موزیک باز، موزیک باران، تک ترانه و تهران موزیک می توانند تمامی پست ها، لینک های دانلود و همچنین جستجو کردن را در اختیار شما قرار دهند. با اسنفاده از دو سایت ZeneFarm و Mp3PM نیز می توانید به راحتی در سایت های جستجوی موزیک، به دنبال یک موزیک بگردید(لینک ها دانلود به صورت مستقیم هستند!) نکته: جستجو در سایت پلی موزیک در حال حاضر ممکن نیست! نکته جالب در مورد این سرویس این است که به صورت خودکار به روز رسانی می شود و نیازی به، به روز رسانی نرم افزار شما ندارد. برای مثال الان 14 سایت است ممکن فردا 20 سایت باشد! شما می توانید تمامی سایت ها را به راحتی در برنامه خود به کار ببرید. -------------- برای گرفتن لیست سایت ها از آدرس زیر استفاده کنید: http://api.win-nevis.com/sites.aspx مقدار بازگشتی به صورت JSON خواهد بود( در زیر می توانید نمونه و نوع متغیر ها را ببینید) [ { "Address": string, "IsRightToLeft": boolean, "IsSearcher": boolean, "Name": string }, { "Address": string, "IsRightToLeft": boolean, "IsSearcher": boolean, "Name": string } ] برای دریافت یک سایت از آدرس زیر استفاده کنید: http://api.win-nevis.com/index.aspx?siteAddress=ESMESITE کافیه نام سایت رو به جای کلمه ESMESITE قرار بدید تا لیست پست های اون سایت رو به شما بده: مثلا من میخوام سایت فارس کیدز رو بگیرم: http://api.win-nevis.com/index.aspx?siteAddress=farskids مقادیر بازگشتی به صورت JSON خواهد بود: [ { "ComingSoon": false, "Date": "23rd Mar 2016", "ImageUrl": "http:\/\/www.27farskids.com\/wp-content\/uploads\/2016\/03\/ddd-1-e1458748085612.jpg", "Name": "Matin M.T – Daghigheha", "Singer": null, "Song": null, "Type": "music", "Url": "http:\/\/www.27farskids.com\/music\/matin-m-t-daghigheha\/", "View": "42,178 Views" }, { "ComingSoon": false, "Date": "23rd Mar 2016", "ImageUrl": "http:\/\/www.27farskids.com\/wp-content\/uploads\/2016\/03\/Mahyar-Tn-Ft-Andish-Ro-Ravane-Hame-Chi.jpg", "Name": "Mahyar TN FT. Andish – Ro Ravane Hame Chi", "Singer": null, "Song": null, "Type": "music", "Url": "http:\/\/www.27farskids.com\/music\/mahyar-tn-ft-andish-ro-ravane-hame-chi\/", "View": "41,083 Views" } ] همونطور که مشاهده می کنید تمامی مقادیر بازگشتی پُر نخواهند بود و بعضی ها null هستند، این به خاطر این است که این مقادیر در یک سایت که آنها را دارد می تواند پُر باشد و در سایت دیگری که این اطلاعات را نمی دهد به صورت null خواهد بود. برای باز کردن صفحه دوم، سوم، چهارم و... از آدرس زیر استفاده کنید: http://api.win-nevis.com/index.aspx?siteAddress=ESMESITE&p=SHOMARESAFHE مثلا من می خوام صفحه چهارم از سایت فاز موزیک رو باز کنم: http://api.win-nevis.com/index.aspx?siteAddress=fazmusic&p=4 مقادیر بازگشتی به همان صورت خواهد بود که از http://api.win-nevis.com/index.aspx?siteAddress=fazmusic استفادهمی کنید. برای جستجو در یک سایت: http://api.win-nevis.com/index.aspx?siteAddress=ESMESITE&s=KALAMEJUSTJU مثلا من می خوام Saman jalili رو در سایت ایران موزیک جستجو کنم: http://api.win-nevis.com/index.aspx?siteAddress=iranmusic&s=saman%20jalili مقادیر بازگشتی به صورت JSON خواهد بود و مانند دو مقدار بازگشتی قبلی است. برای باز کردن صفحه دوم، سوم و... از یک جستجو کافی است از دستور زیر استفاده کنید: http://api.win-nevis.com/index.aspx?siteAddress=ESMESITE&s=KALAMEJUSTJU&p=SHOMARESAFHE اگر در مثال بالا بخواهیم صفحه دوم از جستجو را باز کنیم: http://api.win-nevis.com/index.aspx?siteAddress=iranmusic&s=saman%20jalili&p=2 مقادیر بازگشتی نیز مانند سه مورد قبل خواهد بود. برای گرفتن لینک دانلود، کافی است لینکی پستی که می خواهید را به این آدرس بفرستید: http://api.win-nevis.com/index.aspx?siteAddress=ESMESITE&getDownloadLink=POSTLINK برای مثال من آدرس یک پست از سایت فارس کیدز رو دارم و می خوام لینک های دانلود اون رو دریافت کنم: http://api.win-nevis.com/index.aspx?siteAddress=farskids&getDownloadLink=http://www.27farskids.com/music/ahmad-saeedi-yadet-biad/ مقادیر بازگشتی به صورت JSON خواهد بود: [ { "CommingSoon": false, "Dislike": null, "Like": null, "Name": "Ahmad Saeedi - Yadet Biad [320].mp3", "PostId": null, "Url": "http:\/\/dl3.27farskids.com\/R1\/Music\/95\/01\/03\/Ahmad%20Saeedi%20-%20Yadet%20Biad%20[320].mp3", "Views": null }, { "CommingSoon": false, "Dislike": null, "Like": null, "Name": "Ahmad Saeedi - Yadet Biad [128].mp3", "PostId": null, "Url": "http:\/\/dl3.27farskids.com\/R1\/Music\/95\/01\/03\/Ahmad%20Saeedi%20-%20Yadet%20Biad%20[128].mp3", "Views": null } ] تا اینجای کار برای سایت های موزیک بود، اما برای سایت هایی که مخصوص جستجوی موزیک هستند آدرس کمی متفاوت تر خواهد بود: برای جستجوی یک کلمه از آدرس زیر استفاده کنید: http://api.win-nevis.com/searcher.aspx?siteAddress=ESMESITE&s=KALAMEJUSTJU برای مثال میخواهیم saman jalili رو در سایت mp3pm جستجو کنیم: http://api.win-nevis.com/searcher.aspx?siteAddress=mp3pm&s=saman%20jalili برای باز کردن صفحه دوم، سوم و... از آدرس زیر استفاده کنید: http://api.win-nevis.com/searcher.aspx?siteAddress=ESMESITE&s=KALAMEJUSTJU&p=SHOMARESAFHE مثال: http://api.win-nevis.com/searcher.aspx?siteAddress=mp3pm&s=saman%20jalili&p=2 مقادیر بازگشتی به صورت JSON خواهد بود(مثال برای MP3PM) [ { "ComingSoon": false, "Date": null, "ImageUrl": null, "Name": null, "Singer": null, "Song": null, "Type": null, "Url": "http:\/\/cs1.mp3.pm\/download\/1446657\/S2VaYW9MTDBlazJYQ294UmdISjM1enVFM1VGdjVpbnVCSE5CSlArN3k1djlVMU02dkNVNWRxMmNpamRXYzAyc1Y3T3hVc2ZNYlZLY29WdlFPTXpKYllKWi81NGpRdW9vR2hwOWkwWlh1S0dnYWx2YTdhNUUxMlBoL3ZMbmtlQ1g\/Bahooneh_-_Saman_Jalili_(mp3.pm).mp3", "View": null, "Author": "Bahooneh", "Duration": "02:57", "Size": null, "Sound": "http:\/\/cs1.mp3.pm\/listen\/1446657\/S2VaYW9MTDBlazJYQ294UmdISjM1enVFM1VGdjVpbnVCSE5CSlArN3k1djlVMU02dkNVNWRxMmNpamRXYzAyc1Y3T3hVc2ZNYlZLY29WdlFPTXpKYllKWi81NGpRdW9vR2hwOWkwWlh1S0dnYWx2YTdhNUUxMlBoL3ZMbmtlQ1g\/Bahooneh_-_Saman_Jalili_(mp3.pm).mp3", "Title": "Saman Jalili", "TrackId": null }, { "ComingSoon": false, "Date": null, "ImageUrl": null, "Name": null, "Singer": null, "Song": null, "Type": null, "Url": "http:\/\/cs1.mp3.pm\/download\/6562930\/S2VaYW9MTDBlazJYQ294UmdISjM1enVFM1VGdjVpbnVCSE5CSlArN3k1dExrblJBd0diemtuL2l3dGFFV1BnaXNhM3hHZVdEM2daY3VrNnJzaXVBYVFrakNtOWpCeUM3Nm5KbnA1RC9QSjVCQWhSL1REbUxRYXQwV3JUaXp2dGc\/Saman_Jalili_-_Halam_Bade_2013_(mp3.pm).mp3", "View": null, "Author": "Saman Jalili", "Duration": "02:58", "Size": null, "Sound": "http:\/\/cs1.mp3.pm\/listen\/6562930\/S2VaYW9MTDBlazJYQ294UmdISjM1enVFM1VGdjVpbnVCSE5CSlArN3k1dExrblJBd0diemtuL2l3dGFFV1BnaXNhM3hHZVdEM2daY3VrNnJzaXVBYVFrakNtOWpCeUM3Nm5KbnA1RC9QSjVCQWhSL1REbUxRYXQwV3JUaXp2dGc\/Saman_Jalili_-_Halam_Bade_2013_(mp3.pm).mp3", "Title": "Halam Bade (2013)", "TrackId": null } ] مثال برای ZeneFarm: [{ "ComingSoon": false, "Date": null, "ImageUrl": "https:\/\/i1.sndcdn.com\/artworks-000081638230-64amys-large.jpg", "Name": "Saman Jalili - Khial", "Singer": null, "Song": null, "Type": null, "Url": "http:\/\/zenefarm.com\/download\/saman%20jalili\/153137046", "View": null, "Author": null, "Duration": " 0:03:46", "Size": " 3.5 MB", "Sound": null, "Title": null, "TrackId": "153137046" }, { "ComingSoon": false, "Date": null, "ImageUrl": "https:\/\/i1.sndcdn.com\/artworks-000032057296-ag3w04-large.jpg", "Name": "Mehdi Ahmadvand - Dooset Daram (Ft Saman Jalili)**cafemusic**", "Singer": null, "Song": null, "Type": null, "Url": "http:\/\/zenefarm.com\/download\/saman%20jalili\/63184038", "View": null, "Author": null, "Duration": " 0:03:16", "Size": " 6.5 MB", "Sound": null, "Title": null, "TrackId": "63184038" } ] نکته: برای سایت MP3PM متغیرهای Name, Url, Duration, Size, TrackId دارای مقدار هستند. نکته: برای سایت ZeneFarm متغیرهای Author, Title,ImageUrl,Size Url, Sound, Duration دارای مقدار هستند. نکته: سایت های موزیک نیازی به getDownloadLink ندارند چون تمامی لینک های اون ها به صورت مستقیم خواهد بود. نکته: شاید بگید لینک های سایت ZeneFarm که این صورت است: http://zenefarm.com/download/saman%20jalili/153137046 و این آدرس به صورت مستقیم نیست! اما اگر این لینک را با MediaElement یا Microsoft Edge یا IDM باز کنید خودکار شروع به دانلود میکند. سورس کد برای ویندوز/فون 8.1 و ویندوز 10 ضمیمه شد. منبع: وین نویس موفق باشید. APIForParseDevMusic.zip
  10. سلام این چهارتا تبلیغات بالای سایت ، به صورت نافرم روی هم قرار گرفته اند ، عمودی چیده شده اند . به نظرم جور دیگه ای بود ، بهتر بود ، افقی یا مثلا دو تاش بالای صفحه ، دوتاش پایین صفحه .
  11. سلام؛ می خوام صفحات وب رو ذخیره کنم تا در حالت آفلاین هم به همان شکل و شمایل تقریبی (ترتیب قرار گیری عکس و متنها مهمه) قابل دسترسی و خواندن باشه! چجوری این کار رو بکنم؟ تشکر
  12. سلام؛ در یک لیست ویو، هر آیتم بنا بر محتوایی که باید نمایش بدهد دارای یک تم (Template) یا همون قالب هست. سوال اول: چطور قالب ها رو به صورت مجزا تعریف کنم؟ سوال دوم: چطور برای هر آیتم از لیست ویو، قالب مربوطه رو استفاده کنم؟ با تشکر.
  13. با سلام. برا من لازم شد تو یه قسمتی از اپلیکیشن محاسبه توابع مثلثاتی باشه ! از تابع math سی شارپ استفاده کردم ! و چون ورودی رو بر حسب رادیان میگیره مجبور شدم تبدیلش کنم به درجه ! (Math.PI * Teta) / 180) // Teta is double variable that gets the input number که اگه به اضافه Teta بذاریم 180 : جواب میشه pi . که سینوس 180 ( به عبارتی پی ) اصولا بر حسب دانش دوم دبیرستان دارم میشه 0 :دی ول چنین چیزی میبینم ! و اینم کدی که استفاده شده : if (sin.IsSelected) { Ratio_output.Text = "= " + Convert.ToString(Math.Sin((Math.PI * Teta) / 180)); } ممنون میشم مشکلشو بگین ! با تشکر
  14. سلام؛ من می خواهم وقتی رویداد OnNavigatedTo رویداد، اسم صفحه قبل رو بررسی کنم. اگر از کد زیر برای نویگیشن استفاده کنم: Frame.Navigate(typeof(Page2); می تونم با کد زیر اسم پیج آخر رو بگیرم: var lastPage = Frame.BackStack.Last().SourcePageType; اما مشکل من اینجاست که این کد برای برگشت توسط دکمه سخت افزاری کاربردی نداره. به عبارتی این کد تا زمانی کاربرد دارد که از دستور اول استفاده کرده باشیم. حالا چطور می‌توانم اسم صفحه مورد نظر رو بررسی کنم؟ با تشکر.
  15. سلام؛ در قسمتی از برنامه باید به حساب گوشی دسترسی داشته باشم. اگر روی گوشی یا دسکتاپ حساب کاربر لوکال باشه، سیستم عامل به صورت خودکار از کاربر می خواهد که وارد حساب کاربری مایکروسافت خودش بشه. سوال اینجاست که چگونه تشخیص بدم که کاربر حسابی رو وارد کرده یا خیر؟ با تشکر.
  16. سوال

    سلام؛ یک وب ویو دارم که با متد زیر متن HTML رو بهش میدم: VW.NavigateToString("HTML TEXT"); اما بر اساس فونت پیش فرض خودش اطلاعات رو نمایش میده. من یک فونت در فولدر ASSETS به آدرس زیر دارم: Assets/Font/BYekan.TTF#B Yekan چطور می تونم مطالب رو با این فونت به نمایش بگذارم؟ با تشکر.
  17. یا سلام خدمت گروه وین نویس من در فهم و پیاده سازی OOP کمی مشکل دارم . اگه میشه این مفاهیم رو به صورت کامل و به زبان ساده برای من توضیح بدید . و التبه نکات و پیاده سازیش روی C# . مفاهیمی مثل کپسوله سازی و ... رو خوب نگرفتم. ممنون
  18. سوال

    سلام؛ می خوام Pivot رو شخصی سازی کنم. برای اینکه رنگ هدر و فونتش رو عوض کنم از کد زیر استفاده کردم: <Pivot.HeaderTemplate> <DataTemplate> <Grid> <TextBlock Text="{Binding}" Foreground="White" FontFamily="Assets/Font/BYekan.ttf#B Yekan" /> </Grid> </DataTemplate> </Pivot.HeaderTemplate> ولی با این کار وقتی از یک آیتم به آیتم دیگه میرم، آیتم قبلی رنگش ثایت می مونه. به عبارتی مشخص نیست کدوم مورد انتخاب شده. به جز اینکه بیایم براش رویداد Tapped تعریف کنیم و کد بزنیم، آیا توی خود زمل راه دیگری هست؟
  19. بسم الله الحمن الرحیم سلام دوستان؛ من برای ذخیره سازی دیتاهام از این پایگاه داده استفاده می کنم، چون هم ساده است و هم بسیار سبک. چون ممکن هست برخی از دوستان هم به یک پایگاه داده سبک و سریع نیاز داشته باشند، پس منم سعی می کنم یک آموزش مقدماتی برای شروع کار بنویسم و امیدوارم در کنار اساتید بتونیم یه تاپیک جامع برای پایگاه داده در برنامه های UWP داشته باشیم. حالا با این مقدمه کوتاه می‌ریم سراغ خود آموزش. سعی می کنم هر قطعه کد رو با مثال توضیح بدم تا اگر بیان من ناقص بود از روی مثال بتونید لپ کلام رو بفهمید. در هر صورت هر جا مشکلی بود بفرمایید که اگر بدونم حتما پاسخ می دم یا از اساتید می پرسم. ابتدا باید فایل sqlite-uap-3100200.vsix را دانلود و نصب کنید. در گام بعدی، در Nuget عبارت SQLite.Net-PCL رو سرچ و سپس نصب کنید. و در آخر هم در Reference پروژه مانند تصویر رفرنسهای مشخص شده رو اضافه کنید. اگر Sqlite for universal Ap.. رو نمی بینید، از نصب بودن اون اطمینان پیدا کنید و ویژوال استدیو رو مجددا اجرا کنید. برای اجرای بهتر پایگاه داده نیازمند Visual C++ 2015 نیز هستیم که باید به رفرنس ها اضافه کنیم. برای مثال، می خواهیم یک دیتابیس از اطلاعات یک کلاس دانش آموزی داشته باشیم. من فرض می کنم که شما تا حدودی با برنامه نویسی یک پارچه آشنا هستید، بنابراین تنها به دیتابیس می پردازم. ما به یک کلاس واسط نیازمندیم تا اطلاعات رو بین دیتابیس و سایر متد ها منتقل کند public class Students { [PrimaryKey, AutoIncrement] public int Id { get; set; } public int StudentID { get; set; } public string Name { get; set; } public string Family { get; set; } public string Father { get; set; } } برای استفاده از این کلاس نیازمند فضای نامی زیر هستید: using SQLite.Net.Attributes; اما توضیحات لازم: [PrimaryKey, AutoIncrement] فیلد کلیدی ما رو مشخص می کند و AutoIncrement نیز سبب مقداردهی خودکار به آن می شود. که در اینجا فیلد Id رو به عنوان کلید معرفی شده است. به دو شی برای نگهداری آدرس و کانکشن دیتابیس نیازمندیم: string path; SQLite.Net.SQLiteConnection conn; Path برای ذخیره سازی آدرس محل ساخت فایل دیتابیس است و conn نیز وظیفه ایجاد ارتباط با آن را بر عهده دارد. ایجاد ارتباط با پایگاه داده: path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mydb.sqlite"); conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); conn.CreateTable<Students>(); سطر اول، برای ایجاد دیتا بیس با نام mydb.sqlite است. در سطر بعد، جدولی را بر اساس فیلدهای کلاس Students ساخته خواهد شد. اگر چنین جدولی وجود داشته باشد، تنها ارتباط صورت می گیرد و داده ها پاک نمی شوند. ذخیره اطلاعات: با این دستور insert با استفاده از کانکشن تعریف شده و کلاس واسط می توانید اطلاعات را در جدول مورد نظر (Students) ذخیره سازید. این دستور در هر بار اجرا یک شی جدید از نوع کلاس واسط ایجاد، مقداردهی و سپس در جدول مورد نظر پیاده می کند. var j = conn.Insert( new Students() { StudentID = studentID, Name= name, Family=family, Father= father } ); اگر لازم باشد یک جدول را به کلی حذف کنید می توانید از دستور زیر استفاده کنید: conn.DropTable<Students>(); زمان‌هایی مانند گرفتن نسخه پشتیبانی از دیتابیس لازم است ارتباط با پایگاه داده را قطع کنید. تنها کافیست کانکشن را Close کنید: conn.Close(); اما برخی کوئری های لازم! اولین کوئری رو برای گرفتن تمامی آیتم های موجود در جدول و ذخیره آن در یک لیست: public System.Collections.Generic.List<CDB> List() { List<Students> listmaster = conn.Query<Students>("Select * From Students).ToList<Students>(); return listmaster; } خب ما در این متد با کوئری Select * From Students تمامی آیتم ها را دریافت و در لیستی به نام listmaster میریزیم و آن را برمی گردانیم. در پایان چند کوئری پرکاربرد رو می نویسم: 1. انتخاب یک یا بیشتر از آیتم هایی که مقدار فیلد مشخص شده (در اینجا id) برابر مقدار معینی باشد که عموما برای جست و جو یا لیست کردن تعداد خاصی از آیتم ها کاربرد داره: Select * From Students WHERE Id like '%" + X + "%' X مقداری است که جهت مقایسه استفاده می کنیم. 2. حذف یک مقدار مشخص "Delete From Students Where Id like '%" + X + "%' " 3. گرفتن یک رنج (با تشکر از رامین عزیزم): "Select * From Students WHERE Id >= " + C + " AND Id <= " + D تمامی id هایی که بین C و D هست رو به ما میدهد!
  20. متاسفانه، پادگان ما از 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
  21. معرفی XAML در این درس میخواهیم درباره ساختار XAML که در اولین برنامه یعنی HelloWorld درست کردم صحبت کنیم. خوشبختانه شما در اونجا با این قسمت آشنا شدید که هر کنترل در پنجره طراحی قرار میگرفت، کد XAML آن به صورت خودکار نوشته میشد. تقریبا نحوه فهم و درک XAML در نگاه اول آسان است. به هر حال میخواهیم به برخی از ویژگی ها و توابعی که در نگاه اول ممکن است آشکار نباشد، اشاره کنیم. اهداف ما در این درس: 1. ما درباره اهداف و ماهیت XAML نسبت به زبان سی شارپ صحبت خواهیم کرد. 2. ما درباره امکانات ویژه XAML و برخی از ویژگی های پنهان این زبان که در نگاه اول آشکار نیست صحبت خواهیم کرد. هدف من در پایان این درس، این است که شما دانش کافی را برای XAML نویسی داشته باشید و بتوانید با نگاه کردن به یک کد XAML بفهمید که این کد برای چه میباشد. XAML چیست؟ در درس HelloWorld در درس پیشین کمی با این زبان آشنا شدید و دیدید که شباهت زیادی با HTML دارد. این تصادفی نیست که XAML شباهتی با HTML دارد. XAML واقعا همان XML است که یک زبان نشانه گذاری است. روابط میان این دو را بعدا توضیح میدهم اما در سطح بالاتری، XML شباهتی زیادی با HTML دارد که دستوراتی شبیه به هم دارند. از آنجا که HTML یک زبان برای طراحی صفحات اینترنتی است، XML کمی پرکاربرد تر به حساب می آید. منظور از "پرکاربرد" این است که شما برای هر اهدافی که برای دستگاه دارید، میتوانید نامی را برای آن قرار دهید و از ELEMENT ها(عناصر) و Attribute های(نشانه) آن استفاده نمایید. در گذشته، توسعه دهندگان از XML برای ذخیره سازی داده ها و اطلاعات برنامه استفاده میکردند، یا برای انتقال داده میان دو سیستم که هیچگاه با هم کار نمیکنند، استفاده میکردند. برای استفاده از XML، شما یک الگو (مدل) تعریف میکنید که مناسب عناصر یا نشانه ها باشد. یک الگو همانند یک قرارداد است. همه آن را میپذیرند- هردو XML را تولید میکنند و از آن در XML برای نوشتن یا خواندن مقادیر XML برای قوانین آنها استفاده میکنند، آنها روی این قرارداد پایبند می مانند. حال، آنها میتوانند با همدیگر ارتباط برقرار کنند. پس یک الگو قسمت مهمی از XML است. این را به ذهن بسپارید. ما به این قسمت دوباره سر خواهیم زد. XAML نسخه کاربردی ویژه از XML است. مشخصا ما آنرا میبینیم، حداقل در این مورد، XAML دارای مواردی هست که برای رابط کاربری برنامه های ما تعریف میگردد. از این نظر، احساس میشود که شباهت زیادی به HTML دارد. اما تفاوت بزرگی میان این دو است.... XAML در واقع برای ساخت کلاس های نمونه و تنظیم مقادیر یک دارایی مورد استفاده قرار میگیرد. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Button x:Name="button" Content="Click here!" HorizontalAlignment="Left" Margin="161,255,0,0" VerticalAlignment="Top" Click="button_Click" /> </Grid> برای نوشتن کامنت (Comment) یا متن های توضیح، در XAML از این کد استفاده کنید: <!-- متنها در این قسمت قرار می گیرند --> برای اضافه کردن یک دکمه با استفاده از سی شارپ به محیط طراحی: ابتدا به کنترل Grid اصلی صفحه نامی اختصاص میدهیم: <Grid Name="myLayoutGrid"> کد برای اضافه کردن دکمه در محیط کدنویسی سی شارپ: protected override void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e) { // TODO: Prepare page for display here. Button myButton = new Button(); myButton.Name = "button"; myButton.Content = "Click here!"; myButton.Width = 200; myButton.Height = 100; myButton.Margin = new Windows.UI.Xaml.Thickness(161, 255, 0, 0); myButton.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; myButton.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top; myButton.Background = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Red); myButton.Click += button_Click; myLayoutGrid.Children.Add(myButton); } من کد بالا را در سی شارپ به متد OnNavigatedTo() در کلاس MainPage اضافه کردم. الان یک ارتباط میان MainPage.xaml که محیط طراحی است با MainPage.xaml.cs که کلاس کدنویسی است برقرار کردیم. متد بازنویسی شده OnNavigatedTo هربار که برنامه باز شود اجرا میشود. برای مثال شما میخواهید زنگ به کسی بزنید، برنامه خود را کوچک میکنید و زنگ خود را میزنید سپس دوباره به برنامه بازمیگردید، هر بار که به برنامه بازگردید، این متد اجرا خواهد شد. حال شاید صفحه گوشی در برنامه شما قفل شود، پس از باز کردن آن این متد دوباره اجرا میشود. نکته: در هر صفحه برنامه یک OnNavigatedTo داریم، چنانچه ما در هنگام باز بودن برنامه در صفحه دیگری به جز MainPage باشیم، متد OnNavigatedTo آن صفحه فراخوانی میشود نه متد MainPage. تابع مقابل OnNavigatedTo تابع OnNavigatedFrom است، زمانی که مثلا از MainPage به صفحه دیگری میروید، تابع OnNavigatedFrom از MainPage فراخوانی می شود و Navigate(رفتن به صفحه دیگر) انجام می پذیرد. کد بالا در قسمت کدنویسی سی شارپ برای ایجاد یک دکمه استفاده میشود. چنانچه به کد XAML بالاتر از آن نگاهی بیاندازید میبینید که برای طراحی کد XAML آسانتر از کد سی شارپ است. این سادگی در طراحی کلاس ها و شئ ها میباشد که XAML را متمایز میکند. کدی که در سی شارپ 10 خط شد، در XAML در یک خط نوشته میشود. درک فضاهای نامی XAML در این گام به کدهایی که در بالای فایل MainPage.xaml نوشته شده است که تاکنون آنرا نادیده میگرفیتم، صحبت میکنیم. <Page x:Class="Hello_Word.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Hello_Word" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> در حالی که دارید به این کدها نگاه میکنید، به یاد آورید که در قسمت تعریف XAML گفته شد که یک الگو قسمتی از XML است. الگو ها اگر آن گونه باشند، پس این کدها در این قسمت از XAML چه قراردادی برای یک الگو دارند؟ خط های سه تا هفت را نگاه کنید... 5 الگو برای MainPage.xaml ما نوشته شده است. هر کدام از آنها نشانه ای(attribute) به نام xmlns در خود تعریف کرده اند. اولین xmlns که در خط سه قرار دارد، فضای نامی پیشفرض است، به عبارت دیگر هیچ علامت دو نقطه( : ) یا حتی حرفی بعد از علامت دو نقطه ابتدایی در هر سطر وجود نداره که در سطرهای 4 تا هفتم نیز مشاهده میکنید. در باقی فضاهای نامی در سطرهای چهار تا هفتم، به صورت ترکیبی از نام و کولون استفاده میشود. برای روشن شدن موضوع، :x و یا :phone فضای نامی هستند که ارتباطی با الگو(Schema) دارد (که آنرا "قرارداد" میخوانیم). هر ELEMENT (عناصر) و Attribute (نشانه) که جزئی از MainPage.xaml هستند باید در این قسمت، حداقل به یک الگو پایبند باشند، در غیر اینصورت سند(منظور از سند یا Document کل کدهای MainPage.xaml است یعنی همان XAML ما.) ما خطای غیر معتبر بودن را به ما نشان خواهد داد. به عبارت دیگر، اگر عنصر یا نشانه ای در فایل XAML ما بیان شده باشد که جزئی از این فضای نامی های تعریف شده، نباشند، هیچ ضمانتی وجود ندارد که کامپایلر – برنامه ای است که از طریق کد منبع ما، آنها را تجزیه و تحلیل میکند و برنامه شما را در گوشی یا رایانه اجرا کند- قادر نخواهد بود که این دستورات خاص را چگونه انجام دهد. یک ایده خوب دارم، اجازه دهید که تلاش بیشتری برای کسب اطلاعات بیشتر فضای نامی پیشفرض حرکت کنیم که چه چیزی باعث این فضای نامی در وهله اول میشود: http://schemas.microsoft.com/winfx/2006/xaml/presentation توجه: چنانچه این را امتحان کنید، با شکست روبه رو خواهید شد. چی؟! یک الگو نمیتواند از URL(آدرسی) که پیش از این در سند وجود دارد، استفاده کند. (یک آدرس فقط یکبار قابل استفاده است). دلیل آن نیز این است که الگو به این معنی منتشر نمیشود که شما بتوانید یک آدرس به آن دهید و آنرا مشاهده کنید. در عوض یک الگو به سادگی یک نام منحصر به فرد است، شبیه به فضاهای نامی ای که در سی شارپ برای شناسایی دو کلاس که ممکن است به همین نام باشد، استفاده میکنیم – الگو ( و بقیه فضای نامی در XAML ما) نام ها را به صورت طبقه بندی شده نگه داری میکنند، به عبارتی مانند نام و نام خانوادگی میباشد. این آدرس(یا URL یو آر اِل) به باید به عنوان یک Uri (یو آر آی) ارجاع داده شود(مخفف Uniform Resource IDENTIFIER به جای مکان مورد نظر) به عنوان یک شناسه برای فضای نامی استفاده میشود. فضاهای نامی XML طبق دستور العمل برای کاربرد های مختلف هستند که از طریق XAML تجزیه خواهند شد... تجزیه کننده ویندوز در زمان اجرا برای XAML (Windows Runtime XAML) در پی تبدیل به کدهای اجرایی خواهند بود. خب تا همینجا برای درک فضاهای نامی XAM در این کتاب کافی بود. درک ارتباط میان .xaml و .xaml.cs در قسمت طراحی "راه حل" (Solution) ویژوال استودیو، شما میتوانید ببینید که فایل های XAML دارای یک پیکان هستند که به معنای آن است که ما میتوانیم آنها را با هم نام کردن یک فایل سی شارپ، گسترش دهیم، تنها تفاوتی که وجود دارد این که است که این فایل دارای فرمت .cs در آخر آن است. چنانچه شما به نسخه .cs فایل نگاه کنید، میبنید که یک کلاس MainPage تعریف شده است، علاوه بر این، کلاس به عنوان Partial(بخشی، جزئی) تعریف شده است. public sealed partial class MainPage : Page نیمه دیگر این ارتباط در خطوط یک و دو در فایل MainPage.xaml تعریف میشود: <Page x:Class="Hello_Word.MainPage" چرا این ارتباط اهمیت به سزایی دارد؟ این ارتباط به معنای این است که کامپایلر میتواند یک خروجی از ترکیب فایل های MainPage.xaml و MainPage.xaml.cs داشته باشد. این بدان معنا است که آن ها دو بخش از یک مجموع هستند. این مفهوم مهم است... که XAML کامپایل میشود به زبان سطح متوسط وارد میشود، دقیقا سی شارپ را نیز به درون زبان سطح متوسط وارد میکند که هر دوی آنها بخشی از پیاده سازی یک کلاس هستند. این کار به شما اجازه میدهد که یک نمونه را ایجاد کنید و در فایل دیگر از آن استفاده نمایید. در واقع این چیزی است که به من اجازه میدهد یک کنترل دکمه را در کلاس MainPage با button صدا بزنم و سپس از متدها و Propertyهای آن در سی شارپ استفاده کنم. طراحی XAML با کنترل های Grid در این درس می خواهیم درباره طراحی صحبت کنیم، یا ترجیحا درباره روند موقعیت های کنترل های بصری و دیگر عناصری که در رابط کاربری برنامه شما قرار می گیرند. چندین نوع متفاوت از کنترل های XAML که برای هدف طراحی وجود دارند و محبوب ترین آنها در این درس پوشش داده شده است. در گذشته، طراحی نسبتا ساده بود. چرا که شما تنها روی یک برنامه که فقط یک فرم داشت کار می کردید، یک دستگاه مانند موبایل یا یک برنامه دسکتاپ. با این حال، چندین انعطاف پذیری تازه معرفی گردید و ما شروع به ساخت برنامه برای آنها کردیم که بر اساس دستگاهی که برنامه روی آن اجرا میشد، کنترل ها تغییر اندازه می دهند و دارای انعطاف زیادی میشوند و این فقط یکی از ویژگی های جدیدی است که در توسعه برنامه بر روی پلتفرم ویندوز اضافه شده است. ما شروع به ساخت یک طرح ساده کردیم سپس آنرا با چالش های بیشتر در این درس ادغام نمودیم. پیش از اینکه شروع کنیم، می خواهیم به یک نکته درباره تمامی کنترل های XAML اشاره کنیم که به منظور یک هدف برای یک طرح در نظر گرفته شده اند. بیشتر این این کنترل ها دارای Propertyـه Content هستند، برای مثال در کنترل Button یک Property به نام Content وجود دارد. و پراپرتی Content می تواند به عنوان نمونه از شئ دیگری قرار گیرد. به عبارت دیگر می توانیم پراپرتی Contentـه یک دکمه را یک TextBlock قرار دهیم: ... اما همچنین به آن یک تصویر نیز در کنترل دکمه به صورت پیشفرض قرار دادیم. زمانی که تلاش کنیم بیش از یک کنترل درون پراپرتی Content قرار دهیم، خطایی خواهیم گرفت: The property “Content” can only be set once. پراپرتی Content فقط یکبار می تواند تنظیم شود. به هر حال، کنترل های طراحی طوری تعیین شده اند که می توانند بیش از یک کنترل را در خود جای دهند. پس آن ها به صورت پیشفرض پراپرتی Contentـی ندارد. به جای آن، معمولا پراپرتی Children دارند که از نوع یک داده خاص است، یک نوع داده کلکشن(لیست) که می تواند کنترل های XAML را در خود جای دهند که UIElementCollection نامیده می شوند. در XAML ما می توانیم نمونه های جدیدی از کنترل ها درون این طرح ها تعریف کنیم، در واقع ما با فراخوان تابع Add از این کالکشن ها، کنترل خود را در آن قرار می دهیم. XAML بسیاری از پیچیدگی ها را برای ما پنهان می کند و باعث می شود کد ما برای استنباط کدی که در XAML می نویسیم، خیلی مختصر شود. پس ما شروع به یادگیری درباره طراحی کنترل Grid ی کنیم که از دسته کنترل های طراحی است. مانند هر Gridـی به شما امکان ساخت ردیف و ستون برای ساخت سلول را می دهد. سپس هر کنارلی که در آن تعریف شود می تواند ستون و ردیفی را برای خود اختصاص دهد. پس زمانی که شمایک برنامه جدید با Templateـی خالی را می کنید، شما را کمی به هدفی سوق می دهد. برای شما یک Grid تنهای خالی بدون هیچ ستون و ردیفی تعریف می کند. در هر حال، به صورت پیشفرض، همیشه یک ستون و یک ردیف تعریف شده اند، حتی زمانی که در کد XAML خود چیزی نوشته نشده است. این ردیف و ستون Grid را تبدیل یک سلول بزرگتر با استفاده از گرفتن فضاهای موجود به صورت افقی و عمودی پُر می کند. هر آیتمی که میان عنصر باز و بسته Grid قرار بگیرد به معنایی این است که جزئی از آن است و برای سلولی تعریف شده است. یک نمونه کوچک که از دو ردیف ساخته شده است، ایجاد نمودیم، فقط برای نمایش دو راه برای ساخت ردیف ها و تنظیم طول آنها. این قسمت را در کد زیر نگاه کنید: RowDefinitions در اینجا شما دو کنترل Rectangle را می بینید که اولی با دستور Grid.Row=”0” در ردیف اول و دومی با دستور Grid.Row=”1” در ردیف دوم قرار گرفته است. اما در تعاریف ردیف ها دو کد هست که ممکن است برای شما نا آشنا باشد. ابتدا کد Height=”Auto” به معنای آن است که کنترل ما هر ارتفاعی که دارد، ردیف ما به همان اندازه در خواهد آمد. کد Height=”*” نیز به معنای آن است که باقی فضای Grid را با این ردیف پُر کن. نکته: در برنامه هایی که از چندین Grid استفاده می کنند، کنترل ها از Grid والد آنها ارث بری می کنند. به نوع نگارش کد Grid.Row و Grid.Column توجه فرمایید، این گونه از کدها را ، تنظیمات پیوسته می نامند. تنظیمات پیوسته می توانند مقداری از یک شئ( در این مورد، یک کنترل Rectangle) را تغییر دهند( در این مورد پراپرتی Row، همچنین پراپرتی Column نیز قابل تغییر است) که در کلاس آنها تعریف نشده اند. پس، در اینجا هیچ جایی از کلاس Rectangle هیچ تعریفی از پراپرتی Grid.Row تعریف نشده است، حتی پراپرتی Row نیز در آن وجود ندارد. تمامی این موارد در شئ Grid تعریف شده اند!(پس Rectangle ها از این پراپرتی ها ارث بری کرده اند). کتاب الکترونیک (PDF) این آموزش پیوست شد. سورس کد این پروژه پیوست شد. این درس به اتمام رسید، امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Windows 10 Introduction S01E02.pdf
  22. از امروز می خواهیم آموزش برنامه نویسی یکپارچه(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
  23. استفاده از API های استودیو توسعه پارسه ساده ترین راه برای ایجاد نرم افزار است. بدون کوچک ترین تبلیغی... با استفاده از سرویس آنلاین پارسه سرویسی است که با آن می توانید نام و آدرس پخش زنده کانال های تلویزیونی و ماهواره ای (در حال حاضر 132 کانال پشتیبانی شده است) را بدست آورده و در نرم افزار های خود استفاده کنید. این سرویس کاملا رایگان است. چنانچه کانال جدیدی به این سرویس اضافه شود شما نیازی به، به روز رسانی نرم افزار خود ندارید چرا که خودکار در نرم افزار خود کانال های تازه را خواهید یافت. سرویس تلویزیون آنلاین پارسه برگرفته از قسمت پخش زنده سایت IranProud.NET می باشد. برای گرفتن کانال های تلویزیونی کافی است از لینک زیر استفاده کنید: http://api.win-nevis.com/AVPTV.aspx?getTVs=get مقدار بازگشتی به صورت JSON خواهد بود: [ { "HightUrl": string, "LowUrl": string, "Name": string }, { "HightUrl": null, "LowUrl": "http:\/\/63.237.48.28\/ios\/PMC\/PMC.m3u8", "Name": "PMC" } ] Url پخش زنده در حال حاضر در LowUrl است.حال با استفاده از توضیحات تاپیک قبل که درباره "آموزش استفاده از API موزیک استدیو پارسه" می باشد، مقادیر بازگشتی را Parse کرده و برای خود یک تلویزیون آنلاین ایجاد نمایید. منبع: وین نویس
  24. سلام دوستان عزیز ، ببخشید کسی راهی برای تبدیل تاریخ میلادی به شمسی نداره ؟ در ضمن تابع Globalization.persioncalender در sdk ویندوزفون 8.1 وجود نداره