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

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



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

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

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

نوع محتوا


تالار ها

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

گروه


آدرس تارنما


یاهو


اسکایپ


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


شماره تماس


تلگرام


مکان


علایق


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

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

  1. سلام در ویندوز 10 بیلد 1607 کنترل به نام MediaPlayerElement جدید اضافه شده. چند سوال درباره این دارم پ 1 چگونه باید ادرس فایل برای پخش رو از روی لینکی در اینترنت داد؟ 2 در ورژن های قبل تابعه به نام Player.Pause(); بود الان چی هست
  2. آموزش تبدیل گفتار به نوشتار در ویندوز یکپارچه. کتاب الکترونیک آموزش پیوست شد. پروژه نمونه را می توانید از گیتهاب دانلود نمایید: GitHub - ParseDev/WitAiUWP: Wit Ai Sample for Windows Universal Platfo... نکته چنانچه با این روش مشکل در دریافت دارید، پست زیر رو ببینید: منبع: وین نویس WitAi Speech Recognition.pdf
  3. سلام، کد XAML: <StackPanel Margin="10,40,0,0"> <TextBlock Text="Simple Camera" FontSize="20"/> <Button Name="myCamButton" Content="Start Camera" Height="40" Width="120" Click="myCamButton_Click"/> <Image Margin="0,20,0,0" Name="capturedImage" Height="300" Width="300"/> </StackPanel> فضاهای نامی مورد نیاز: using Windows.Media.Capture; using Windows.Storage; using Windows.Storage.Streams; using Windows.UI.Xaml.Media.Imaging; کد سی شارپ: async private void myCamButton_Click(object sender, RoutedEventArgs e) { CameraCaptureUI captureUI = new CameraCaptureUI(); captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); BitmapImage bitmapImage = new BitmapImage(); using (IRandomAccessStream fileStream = await photo.OpenAsync(FileAccessMode.Read)) { bitmapImage.SetSource(fileStream); } capturedImage.Source = bitmapImage; } نکته: برای استفاده از دوربین باید در فایل package.appxmanifest در تب Capabilities گزینه Microphone را تیک بزنید تا با خطای UnauthorizeAccess مواجه نشوید: پروژه نمونه پیوست شد. موفق باشید. Camera Sample.zip
  4. آموزش استفاده از کنترل های رایج 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
  5. سلام میخوام یه قالب داشته باشم که برای تمام پیج های دیگه ام هم باشه مثل Master Page ها در asp.net مثلن یه منوی همبرگری در سمت چپ و یه جور نوار ابزار هم در بالا و وقتی بخوام از پیجی به پیج دیگه برم اینا سرجاشون باشن فقط محتوای وسط تغییر کنه ! نمیخوام برای هر پیج توی فایل Xaml شون دوباره بیام همه ی کد هارو بنویسم چه کار باید بکنم؟
  6. سلام و وقت دوستان وین نویسی بخیر، برای ساخت TitleBar سفارشی نیاز به دویست کیلومتر کدنویسی نیازی نیست، در اصل مانند بقیه چیزهای UWP این یکی خیلی آسون می باشد صفحه MainPage.xaml را باز کنید و کدهای زیر را درون آن بنویسید: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- in grid baraye title bar e sefareshi hast, gharare elemente Rectangle oun ro ke faghat ye range khali hast, titlebar konim, va az baghie elementhaye oun be ounvane titlebar estefade konim. --> <!-- soal: chera nemiaim khode grid o titlebar konim? chon age inkar ro konim hichkodom az ashyaae oun ghabale click shodan ya tap shodan nistan! --> <Grid Grid.Row="0" x:Name="TitleBar"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Rectangle x:Name="BackgroundElement" Fill="#FF0078D6" Grid.ColumnSpan="4"/> <Grid> <TextBlock Text="WN Custom Title Bar" VerticalAlignment="Center" FontSize="12" FontFamily="Segoe UI" FontWeight="Normal" Margin="10,0" /> </Grid> <Button x:Name="btnWinNevis" Grid.Column="1" Content="Open Win Nevis" Margin="10,0" Click="btnWinNevis_Click"/> <CheckBox Grid.Column="2" Content="Checkbox1"/> <Grid Grid.Column="3" x:Name="RightMask" /> </Grid> <!-- har chizi ke mikhaid ke dakhele pageton bashe ro inja dakhele in Grid benevisid: --> <Grid Grid.Row="1"> <TextBlock Text="Win Nevis Group" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid> </Grid> اکنون MainPage.xaml.cs را باز کرده و فضاهای نامی زیر را به قسمت فضاهای نامی اضافه کنید: using Windows.UI.ViewManagement; using Windows.ApplicationModel.Core; using Windows.UI; حال در قسمت اصلی صفحه بالای تابع public MainPage خط زیر را بنویسید: private ApplicationViewTitleBar titleBar; اکنون درون Constructor یا همان تابع public MainPage پس از کد InitializeComponent کد زیر را بنویسید: Loaded += MainPage_Loaded; تابع این رویداد را نیز بنویسید: private void MainPage_Loaded(object sender, RoutedEventArgs e) { // tanzime title bar CoreApplicationViewTitleBar coreTitleBar = CoreApplication.GetCurrentView().TitleBar; coreTitleBar.ExtendViewIntoTitleBar = true; coreTitleBar.IsVisibleChanged += CoreTitleBar_IsVisibleChanged; coreTitleBar.LayoutMetricsChanged += CoreTitleBar_LayoutMetricsChanged; Window.Current.SetTitleBar(BackgroundElement); // tagheire range dokmehaye title bar (dokmehaye exit, minimize, maximum) titleBar = ApplicationView.GetForCurrentView().TitleBar; titleBar.BackgroundColor = new Color { A = 255, R = 0, G = 120, B = 214 }; titleBar.ForegroundColor = Colors.White; titleBar.ButtonBackgroundColor = new Color { A = 255, R = 0, G = 120, B = 214 }; titleBar.ButtonForegroundColor = Colors.White; } سوال: چرا جای المنت Grid که نام اون رو TitleBar گذاشتیم، المنت Rectangle با نام BackgroundElement رو قرار دادیم؟ دلیل اینه که اگه گرید رو بذاریم کنترل های روی اون غیر قابل کلیک خواهند شد، دلیل این را مایکروسافت این می داند که به صورت پیشفرض همیشه این قسمت از پوینتر(موس یا لمس) تایتل بار اصلی استفاده می کند پس کنترلی که در این قسمت قرار می دهید رویداد های پوینتر آن به روز رسانی نمیشوند. باقی رویداد ها را نیز بنویسید: void CoreTitleBar_IsVisibleChanged(CoreApplicationViewTitleBar titleBar, object args) { TitleBar.Visibility = titleBar.IsVisible ? Visibility.Visible : Visibility.Collapsed; } private void CoreTitleBar_LayoutMetricsChanged(CoreApplicationViewTitleBar sender, object args) { if (FlowDirection == FlowDirection.LeftToRight) RightMask.Width = sender.SystemOverlayRightInset; else RightMask.Width = sender.SystemOverlayLeftInset; } private void btnWinNevis_Click(object sender, RoutedEventArgs e) { OpenUrl("https://www.win-nevis.com"); } async void OpenUrl(string url) { var options = new Windows.System.LauncherOptions(); options.TreatAsUntrusted = false; await Windows.System.Launcher.LaunchUriAsync(new Uri(url), options); } پروژه پیوست شد. موفق باشید. منبع : وین نویس Custom TitleBar Sample.zip
  7. بسم الله سلام و عرض ادب خدمت عزیزان توی مطلب قبلی (آموزش ارسال پوش توسط OneSignal) چگونگی استفاده از سرویس OneSignal برای ارسال پوش نوتیفیکیشن رو مرور کردیم. بعد از انتشار مطلب متوجه شدیم که مایکروسافت ترتیبی داده که میشه از طریق داشبورد هم پوش انجام داد. توی این مقاله قصد دارم تا آموزش استفاده از این سرویس رو بنویسیم. ​چرا پوش از طریق مایکروسافت؟ ​این سرویس برای استفاده در پلتفرم یکپارچه ایجاد شده و بنابراین میتونید از همه نوع قالبهای موجود توست در ویندوز استفاده کنید. امکان شخصی سازی بسیار پیشرفته و حرفه ای ساخت اعلان به صورت تماما گرافیکی و آسان امکان تبدیل توست ساخته شده، به کد XML (برای استفاده در نرم افزار یا جای دیگر) امکان استفاده از کد XML برای ارسال پشتیبانی از پوش برای بروز رسانی کاشی ​چرا نه؟ بزرگترین و مهمترین دلیل این هست، که فقط و فقط میتونید، از طریق پنل اقدام به ارسال پوش کنید و فقط دستی! (درحالی که وان سیگنال امکان ساختن اتوماسیون رو از طریق api در اختیارتون قرار میده) همانطور که قبلا گفتم، این سرویس برای uwp ایجاد شده و متاسفانه فقط برای این پلتفرم قابل استفاده هست ​چگونه باید استفاده کرد؟ ابتدا باید ابزار توسعه سرویسهای استور رو دانلود کنید و روی سیستمتون نصب کنید. بعد از نصب، پروژه رو باز میکنیم و Referenceی به نام Microsoft Engagement Framework رو به پروژه اضافه میکنیم: ارسال پوش در همه سرویسها از طریق آدرسی به نام Channel URI ممکن میشه، که این آدرس به صورت دوره ای منقضی میشه و بنابراین باید در هر اجرا بررسی بشه که اگر منقضی شده آدرس جدید رو بگیریم و برای سرور ارسال پوش بفرستیم. ​برای اینکار فایل app.XAML.cs رو باز میکنیم و این namespace رو بهش اضافه میکنیم: using Microsoft.Services.Store.Engagement; بعدش هم در متد OnLaunched کد زیر رو برای درخواست و ثبت ChannelURI اضافه میکنیم: StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault(); await engagementManager.RegisterNotificationChannelAsync(); و پایان!! الان کافیست از داشبورد اپلیکیشن مورد نظر رو انتخاب کنید و از قسمت Services گزینه Push Notifications رو انتخاب کنید و اقدام به ارسال کنید. اما این میتونه انتهای کار نباشه! شما میتونید چیزهای زیادی رو تعیین کنید، که به زودی در ادامه خواهم گفت! مثلا میتونید صفحه ای رو برای نمایش کامل جزئیات اعلان اختصاص بدید! موفق باشید!
  8. سلام به وین نویسی های عزیز، عصر پاییزیتون بخیر، امیدوارم که همیشه سر حال و سر زنده باشید. در این زمان از وین نویس، می خواهیم آموزش کار با انیمیشن ها را با همدیگر فرا بگیریم. دانلود کتاب این آموزش سورس کد این آموزش همچنین شما می توانید از این آموزش که یک آموزش به زبان انگلیسی است نیز استفاده نمایید: َAnimated navigation in Universal Apps سورس کد منبع: وین نویس
  9. سلام به وین نویسی ها، عصر پاییزیتون بخیر، امیدواریم سر حال باشید. پس از انتشار اولین نسخه از سورنا بعضی از دوستان از طریق تلگرام و ایمیل درخواست آموزش ساخت دیتابیس آنلاین رو دادند و اینکه چطوری میشه به دیتابیس سایتی که دارم متصل بشیم. در این آموزش شما به یک دامنه و یک هاست ویندوزی نیاز دارید. برای شروع شما می توانید از سایت زیر هاست ویندوزی را تهیه نمایید. نکته: هاست باید از MySQL پشتیبانی کند. نکته: شما باید گزینه Microsoft Web Developer Tools را نصب کرده باشید. دانلود کتاب الکترونیک آموزش دانلود پروژه UWP (برنامه) دانلود پروژه سایت (ASP) درون فایل فشرده پروژه سایت، دو تا فولدر وجود داره، برای باز کردن پروژه به پوشه Projects بروید و Win Nevis را انتخاب کنید و راه حل را با ویژوال استودیو باز کنید. چون ما پروژه را به صورت سایت ایجاد کردیم، فقط فایل راه حل درون Visual Studio 2015/Projects قرار میگیرد و تمامی کدها و کلاس هایمان درون پوشه Visual Studio 2015/WebSites قرار میگیرند. منبع: وین نویس
  10. پس از ماه ها تلاش تیم توسعه پارسه، بالاخره مفتخریم اعلام نماییم که اولین نسخه از نرم افزار سورنا در استور مایکروسافت برای دستگاه های ویندوز ده منتشر شد. توضیحات نرم افزار: سورنا نرم افزاری است که با آن می توانید به کند و کاو موسیقی در اینترنت بپردازید. سورنا می تواند از هر سایتی که ارائه می دهد، موزیک را برای شما پخش کند. آیا سایتی که دوست دارید، در لیست سایت های سورنا موجود نیست؟ با چند کلیک ساده می توانید سایت مورد نظرتان را به لیست سایت های سورنا اضافه کنید. با سورنا دیگر نگران از دست دادن موسیقی های جدید نباشید. ویژگی های این نسخه: قابلیت ساخت اکانت و لاگین شدن به سورنا قابلیت خرید اکانت و تمدید اکانت قابلیت پشتیبانی از سایت های سورنا قابلیت دریافت تمامی لینک ها قابلیت پخش آنلاین موزیک ها در پس زمینه قابلیت دانلود آهنگ ها، موزیک ویدیو ها و آلبوم ها در پس زمینه قابلیت اضافه کردن سایت ها و موزیک ها به علاقمندی ها قابلیت کپی کردن لینک های دانلود قابلیت اشتراک گذاری موزیک ها با دیگر سورنایی ها محیطی کاملا جذاب و دیدنی و واکنش گرا اسکرین از نسخه دسکتاپ: اسکرین از نسخه موبایل: لینک دانلود: دانلود از استور مایکروسافت منتظر نرم افزار سورنا برای ویندوز دسکتاپ(EXE)، اندروید و آی او اس نیز باشید... . منبع: سورنا
  11. سلام دوستان وین نویسی، شب پاییزیتون بخیر. توسعه نرم افزار سورنا نسخه ویندوز 10(قابل اجرا بر روی تمامی دستگاه های ویندوز 10ـی به جز XBOX) در حال اتمام است. این نرم افزار در حال حاضر از این ویژگی ها برخوردار است: قابلیت ساخت اکانت و لاگین شدن به سورنا قابلیت پشتیبانی از سایت های سورنا قابلیت دریافت تمامی لینک ها قابلیت پخش آنلاین موزیک ها در پس زمینه قابلیت دانلود آهنگ ها، موزیک ویدیو ها و آلبوم ها در پس زمینه قابلیت اضافه کردن سایت ها و موزیک ها به علاقمندی ها قابلیت کپی کردن لینک های دانلود قابلیت اشتراک گذاری موزیک ها با دیگر سورنایی ها محیطی کاملا جذاب و دیدنی و واکنش گرا این نسخه در حال حاضر به استور ارسال شده است، چنانچه توسط مایکروسافت تایید شد، به اطلاع شما دوستان گرامی خواهیم رساند. چنانچه شما نمی دانید سورنا چیست: سورنا نرم افزاری است که با آن می توانید به کند و کاو موسیقی در اینترنت بپردازید. سورنا می تواند از هر سایتی که ارائه می دهد، موزیک را برای شما پخش کند. آیا سایتی که دوست دارید، در لیست سایت های سورنا موجود نیست؟ با چند کلیک ساده می توانید سایت مورد نظرتان را به لیست سایت های سورنا اضافه کنید. با سورنا دیگر نگران از دست دادن موسیقی های جدید نباشید. موسیقی صدای شادی شماست. تصاویری چند از این نرم افزار: منبع: استدیو توسعه پارسه
  12. با سلام، چطوری میتونم مثل تصویر زیر، عدد یا علامتی را نشان دهم؟
  13. به نام پروردگار یگانه سلام به وین نویسی ها، صبح جمعه پاییزیتون بخیر، امروز می خواهیم درباره نحوه ساخت چند پوسته کردن برنامه ها حرف بزنیم. ویندوز 10 به صورت پیشفرض از سه نوع تم یا پوسته پشتیبانی می کنه: تاریک، روشن و کنتراست بالا. Dark, Light and HighContrast به صورت پیشفرض نرم افزار شما پوسته تاریک را انتخاب می کند. برای تغییر این حالت کافی است فایل App.xaml را باز کرده و پراپرتی RequestedTheme را روی Dark قرار دهید: اینطوری نرم افزار شما به صورت پیشفرض میاد پوسته تاریک رو برای برنامه شما در نظر میگیره و رنگهایی که برای پوسته تاریک به صورت پیشفرض تعیین شده رو بارگذاری می کنه به نمایش در میاره. پروژه جدید ویندوز 10 ای به نام WN Application Themes ایجاد کنید. روی پروژه راست کلیک کرده و سپس به گزینه Add رفته و New Item را انتخاب کنید. درون پنجره باز شده Template را روی Resource Dictionary قرار داده و نام آنرا MyThemes گذاشته روی Add کلیک کنید: حال درون MyThemes.xaml خط زیر را حذف کنید: xmlns:local="using:WN_Application_Themes" حال کدهای زیر را درون بلاک ResourceDictionary بنویسید: <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Light"> <SolidColorBrush x:Key="FontColor" Color="#FF00232B" /> <SolidColorBrush x:Key="BackgroundColor" Color="#FFF0F0F0" /> </ResourceDictionary> <ResourceDictionary x:Key="Dark"> <SolidColorBrush x:Key="FontColor" Color="#FF838987" /> <SolidColorBrush x:Key="BackgroundColor" Color="#FF1B1B1B" /> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> یک ریسورس دیکشنری از نوع تم دیکشنری تعریف کردیم که مخصوص به استایل دهی به پوسته هاست. درون این دیکشنری دو دیکشنری به کلید واژه های Light و Dark تعریف کردیم. کلید واژه ها در اصل همان پوسته هایی هستند که ویندوز 10 از آن پشتیبانی می کند. درون این دیکشنری ها نیز ما دو رنگ انتخاب کردیم یکی برای رنگ فونت با کلید واژه FontColor یکی نیز برای رنگ پس زمینه با کلید واژه BackgroundColor. درون دیکشنری با کلید واژه Light تمامی رنگ هایی که می خواهید برای پوسته روشن داشته باشید را باید با کلید واژه ای تعیین کنید. درون دیکشنری با کلید واژه Dark نیز باید همین کار را با همان کلیدواژه های مساوی دیکشنری Light تعریف کنید. نکته: جز دیکشنری روشن و تاریک می توانید یک دیکشنری دیگر به نام HighContrast داشته باشید! نکته: فایل دیکشنری MyThemes.xaml برای این ایجاد شد تا شما بدانید چگونه می توانید رنگ هایی را به صورت پیشفرض و دلخواه خود برای کنترلی قرار دهید. اکنون باید این فایل برای فایل App.xaml بشناسید که به عنوان یک دیکشنری ادغامی آنرا بشناسد. پس فایل App.xaml را باز کرده و کدهای زیر را درون آن بنویسید: <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="MyThemes.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> نکته: Source مکان فایل دیکشنری تم شما را تعیین می کند. چنانچه آنرا درون پوشه ای قرار داده اید باید نام پوشه را نیز بنویسید. مثلا اگر این فایل درون پوشه Assets باشد، Assets/MyThemes.xaml را باید درون Source بنویسید. حال Ctrl+Shift+S را بزنید تا تمامی فایل هایی که ایجاد کردید ذخیره گردند. حال کلاس جدیدی به نام Helper ایجاد کنید: فضاهای نامی زیر را در قسمت فضاهای نامی این کلاس بنویسید: using Windows.Storage; using Windows.UI.Xaml; حال کلاس آنرا به این صورت بنویسید public class Helper { public static ElementTheme CurrentTheme; public const string AppThemeConstant = "AppThemeConstant"; public static object LoadSettings(string key) { if (!ApplicationData.Current.LocalSettings.Values.ContainsKey(key)) return null; else return ApplicationData.Current.LocalSettings.Values[key]; } public static void SaveSettings(string key, object value) { if (!ApplicationData.Current.LocalSettings.Values.ContainsKey(key)) ApplicationData.Current.LocalSettings.Values.Add(key, value); else ApplicationData.Current.LocalSettings.Values[key] = value; } public static void RevertRequestedTheme(FrameworkElement fe, ElementTheme theme) { fe.RequestedTheme = theme; CurrentTheme = theme; } } این کلاس برای ذخیره سازی و تنظیم تم به کار می رود. حال این کلاس را ذخیره کرده و آنرا ببندید. فایل App.xaml.cs را باز کنید. درون Constructorـه این کلاس، کد زیر را بالای this.InitializeComponent بنویسید: SetTheme(); حال تابع آنرا نیز بنویسید: private void SetTheme() { object obj = Helper.LoadSettings(Helper.AppThemeConstant); if (obj != null) { try { ApplicationTheme theme = (ApplicationTheme)Enum.Parse(typeof(ApplicationTheme), obj as string); App.Current.RequestedTheme = theme; if (theme == ApplicationTheme.Dark) Helper.CurrentTheme = ElementTheme.Dark; else Helper.CurrentTheme = ElementTheme.Light; } catch { Helper.CurrentTheme = ElementTheme.Default; } } } مقدار LoadSettings در کلاس Helper مقداری را که در آن ذخیره شده است را از نوع Object بازگردانی می کند. بررسی می کنیم که چنانچه obj برابر با null نبود یعنی مقدار دارد. حال با استفاده از obj که نوع آن string است (در قسمت MainPage توضیح داده میشود)را با استفاده از کد Parseـه Enumerateها به Enumeratـه ApplicationTheme تبدیل می کنیم. سپس مقدار آنرا برابر با App.Current.Theme قرار میدهیم با این کار پوسته پیشفرض برنامه به چیزی که ذخیره شده است تبدیل می شود. حال بررسی می کنیم که چنانچه پوسته Dark بود مقدار CurrentThemeـه درون Helper که از نوع ElementTheme است را تاریک کند، در غیر اینصورت آنرا برابر با تاریک قرار دهد. سوال: چرا از try…catch استفاده شد؟ Enumـه ApplicationTheme دارای دو پوسته بیشتر نیست یکی روشن و تاریک، یعنی خبری از Default نیست اما در Enumـه ElementTheme علاوه بر اینکه تاریک و روشن وجود دارد Default نیز است که چنانچه در هنگام Parseـه Enumـه ElementTheme به ApplicationTheme مقدار Default باشد Excetion(استثنا) رخ می دهد که مقدار Default در این Enumerate وجود ندارد. پس درون catch مقدار CurrentTheme را روی Default قرار میدهیم. اکنون فایل MainPage.xaml را باز کنید و کدهای زیر را درون آن قرار دهید: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="120" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock Text="Choose theme" VerticalAlignment="Center" HorizontalAlignment="Center" /> <ComboBox x:Name="cmbTheme" Grid.Column="1" SelectedIndex="0" VerticalAlignment="Center" HorizontalAlignment="Center" SelectionChanged="cmbTheme_SelectionChanged"> <ComboBoxItem Content="Default" /> <ComboBoxItem Content="Dark" /> <ComboBoxItem Content="Light" /> </ComboBox> </Grid> <Button x:Name="button" Content="استایل پیشفرض" HorizontalAlignment="Left" Margin="23,27,0,0" Grid.Row="1" VerticalAlignment="Top" /> <Button x:Name="button1" Content="استایل تعیین شده" HorizontalAlignment="Left" Background="{ThemeResource BackgroundColor}" Foreground="{ThemeResource FontColor}" Margin="23,71,0,0" Grid.Row="1" VerticalAlignment="Top" /> </Grid> به دکمه ها نگاه کنید. دکمه "استایل پیشفرض" دارای Background و Foregroundـی است که ما درون فایل MyThemes.xaml قرار داده ایم است. حال تابع رویداد SelectionChangedـه ComboBox را درون MainPage.xaml.cs بنویسید : private void cmbTheme_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cmbTheme.SelectedIndex != -1) { ComboBoxItem cbi = cmbTheme.SelectedItem as ComboBoxItem; if (cbi != null) { try { ElementTheme theme = (ElementTheme)Enum.Parse(typeof(ElementTheme), (string)cbi.Content); Helper.CurrentTheme = theme; Helper.RevertRequestedTheme(this, theme); Helper.SaveSettings(Helper.AppThemeConstant, theme.ToString()); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("ex: " + ex.Message); } } } } بررسی می کنیم چنانچه مقدار SelectedIndexـه Combo برابر با منفی یک نبود(یعنی آیتمی انتخاب شده بود) شرط درست است. حال متغیر SelectedItem را چون از نوع ComboBoxItem درون XAML تعیین کردیم cast می کنیم سپس بررسی می کنیم که مقدار cbi برابر با null نباشد. اکنون با استفاده از پراپرتی Contentـه ComboBoxItem که از نوع object است، مقدار cast شده Content را به صورت رشته در می آوریم و آنرا به صورت Enumerateـه ElementTheme، پارس Parse می کنیم. سپس مقدار CurrentTheme را برابر با همین پوسته قرار می دهیم. حال در خط بعد تابع RevertRequestedTheme را با دو پارامتر ورودی this و theme می نویسیم. این کار برای اعمال تم جدید به صورت آنی است. نکته: چون در زمان اجرا، پوسته را تعیین کردیم نمی توانیم پوسته را برای تمامی صفحات با استفاده از کد زیر اعمال کنیم: App.Current.RequestedTheme = theme; چنانچه این کار را انجام دهیم برنامه Exception خواهد داد! چون این فقط و فقط یکبار آن هم در اجرای تابع Constructorـه App.xaml.cs میشود به آن مقدار داد. برای رفع این مشکل کافی است تابع باز نویسی شده OnNavigatedTo درون صفحات را بنویسید و کد زیر را درون آن قرار دهید: Helper.RevertRequestedTheme(this, Helper.CurrentTheme); یعنی: protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); Helper.RevertRequestedTheme(this, Helper.CurrentTheme); } در آخر نیز مقدار theme را به صورت رشته در می آوریم تا نام پوسته را ذخیره کنیم و بعدا که برنامه بسته و باز شد، آنرا بارگذاری کرده و از طریق آن پوسته را انتخاب کنیم. به همین سادگی و خوشمزگی! کتاب الکترونیک این آموزش + سورس کد پروژه پیوست شد. امیدوارم همچنان همراه ما باشید... . منبع: وین نویس Application Multiple Themes Sample.zip Application Theme.pdf
  14. به نام پروردگار یگانه سلام فراوان خدمت تمامی وین نویسی ها، امیدوارم حالتون خوب باشه. چندی پیش داخل تاپیک های انجمن در مورد پرداخت های درون برنامه ای بعضی از دوستان سوالاتی پرسیده بودند که البته حسام کاشفی عزیز آموزش جامعی رو درباره روش کسب درآمد از فروشگاه مایکروسافت رو توضیح داده، این آموزش رو می تونید از آدرس زیر فرا بگیرید: آموزش کسب درآمد از ویندوز استور در این آموزش، شما با استفاده از درگاه زرین پال می توانید برای نرم افزار خود یک پرداخت درون برنامه ای کوچک راه اندازی کنید. مواردی که شما باید پیش از آنها داشته باشید: 1. مرچنت کد زرین پال(کد درگاه پرداخت): کدی یکتا و 36 کاراکتری است که زرین پال به ازای هر درخواست درگاه پرداخت به پذیرنده اختصاص می دهد. 2. سایتی برای خودتان 3. ویژوال استودیو 2015 + SDK ویندوز 10 نکته: این آموزش بر روی ویندوز/فون 8.1 عملی نیست، برای عملی کردن این آموزش برای ویندوز/فون 8.1 شما باید وبسایتی با هاست ویندوزی تهیه کنید و با استفاده از ASP برای خود واسطه ای ایجاد نمایید تا بتوانید در ویندوز/فون 8.1 از وب سرویس استفاده کنید. خب چنانچه هنوز در زرین پال عضو نشده اید می توانید از طریق لینک زیر استفاده کنید: عضویت در زرین پال نکته: شاید برای اولین بار که عضو زرین پال می شوید یا درگاه سفارش میدهید، باید تمامی اطلاعات خود اعم از کپی کارت ملی(عکس از کارت ملی نیز بگیرید قابل قبول است) ، سن و ... را وارد نمایید. پس از تایید زرین پال و ساخت کیف پول برای شما: برای درخواست درگاه زرین پال بعد از عضویت به پنل کاربری خود رفته و در منو سمت راست گزینه درگاه های پرداخت را انتخاب کنید. در این صفحه روی "درخواست درگاه پرداخت" کلیک کنید. اطلاعات بالا را باید تکمیل و ثبت نمایید. نکته: هر سایت فقط می تواند یک درگاه پرداخت داشته باشد. نکته: فرض کنید شما یک وبسایت با هاست لینوکسی دارید اکنون یک وبسایت با هاست ویندوزی ایجاد کرده اید اما چیزی جز کدهای ASP نمی خواهید در هاست جدید خود داشته باشید، زرین پال برای اینکه به شما درگاه پرداخت دهد سایت شما باید نوشته ای یا کالایی را در خود داشته باشد، پس اگر برای سایت جدیدتان درخواست دهید 100% از شما می خواهند که سایت شما باید اطلاعاتی داشته باشد. راه آسانتر این است که درگاه پرداخت سایتی که در آن اطلاعات یا کالایی را در اختیار دیگران قرار می دهد استفاده کنید(اگر درگاه ندارد برای همین سایت درگاه سفارش دهید). به صورت پیشفرض گزینه "با محدودیت آی پی" برای درگاه های شما فعال است، شما باید در تنظیمات مربوط به درگاه پرداخت خود، گزینه "بدون محدودیت آی پی" را برای درگاه خود انتخاب کنید: خب پس از ساختن درگاه توسط زرین پال، در صفحه "درگاه های پرداخت" درگاه هایی که دارید برای شما نمایش داده می شود: خب این صفحه را باز گذاشته یا کد درگاه پرداخت مربوطه را در NotePad کپی کنید. پروژه ویندوز 10ـیه جدیدی به نام WN ZarinPal Payment ایجاد نمایید. پس از ساخت پروژه، صفحه طراحی MainPage.xaml را باز کنید و کدهای زیر را در آن بنویسید: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2.5*" /> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBox x:Name="txtAmount" VerticalAlignment="Top" HorizontalAlignment="Stretch" InputScope="Number" PlaceholderText="Type your price to pay..."/> <Button x:Name="btnPay" Content="Pay" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Center" Click="btnPay_Click" /> <WebView x:Name="webView" Grid.ColumnSpan="2" Visibility="Collapsed" NavigationCompleted="webView_NavigationCompleted" /> </Grid> تکست باکس برای تعیین مقدار پول پرداختی است. نکته: پولی که قرار است کاربر پرداخت کند بر اساس تومان است. کنترل وب ویو نیز برای پرداخت کردن است. خب حال در پنجره راه حل یا Solution Explorer روی References راست کلیک کرده و گزینه Add Service Reference… را انتخاب نمایید: صفحه برای شما باز خواهد شد: آدرس زیر، برای وب سرویس زرین پال استفاده می شود، آنرا باید در قسمت Address صفحه ای که باز شده است بنویسید و روی Go کلیک کنید: https://www.zarinpal.com/pg/services/WebGate/wsdl این آدرس از کتاب مستندات فنی اتصال به وب سرویس زرین پال گرفته شده است! آدرس کتاب: https://github.com/SamanSystems/Zarinpal-Gateway-Documentation/archive/master.zip سپس تکست Namespace را حذف کرده و کلمه ZarinPal را در آن بنویسید و روی OK کلیک کنید: حال صفحه کدنویسی MainPage.xaml.cs را باز کنید و فضای نامی زیر را در فضاهای نامی بنویسید: using WN_ZarinPal_Payment.ZarinPal; در بالای Constructorـه MainPage کدهای زیر را بنویسید: string merchantCode = "YOUR MERCHANT CODE"; string authority = string.Empty; int amount = 0; string description = string.Empty; string email = string.Empty; string mobile = string.Empty; string callBackUrl = "https://www.win-nevis.com/app/payment.txt"; MerchantCode: کدی یکتا و 36 کاراکتری است که زرین پال به ازای هر درخواست درگاه پرداخت به پذیرنده اختصاص می دهد. Authority: شناسه یکتایی که سایت زرین پال به ازای هر درخواست خرید، به پذیرنده ارسال می کند، این شناسه 36 کاراکتر دارد. Amount: مبلغ پرداختی است. این مبلغ بر حسب تومان است. کمترین میزان پرداختی 100 تومان است.(البته اگه اشتباه نکنم) Description: توضیحات تراکنش متنی است که توسط پذیرنده تعیین می شود که نشان دهنده خلاصه محصول یا سرویسی است که پذیرنده قصد فروش آنرا دارد.(منظور از پذیرنده خودتان هستید!) Email: ایمیل خریدار است که توسط پذیرنده در وب سرویس تعیین می شود که جهت سهولت در پیگیری های پس از پرداخت استفاده خواهد شد( این پارامتر اختیاری است). Mobile: شماره تماس خریدار است که توسط پذیرنده وب سرویس تعیین می شود که جهت سهولت در پیگیری های پس از پرداخت استفاده خواهد شد( این پارامتر اختیاری است). CallbackUrl: آدرسی که بعد از پایان عملیات در سمت زرین پال، خریدار به آنجا بازگشت داده می شود. در اینجا یک فایل Textـه خالی در سایت وین نویس آپلود شده است که پس از پرداخت به آن ارجاع داده شود. تابع ShowMessage را بنویسید. این تابع برای نمایش پیغام هاست. async private void btnPay_Click(object sender, RoutedEventArgs e) { description = "امتحان درگاه پپرداخت"; int.TryParse(txtAmount.Text, out amount); if (amount < 100 || string.IsNullOrEmpty(merchantCode) || string.IsNullOrEmpty(description) || string.IsNullOrEmpty(callBackUrl)) return; PaymentGatewayImplementationServicePortTypeClient zp = new PaymentGatewayImplementationServicePortTypeClient(); PaymentRequestResponse response = await zp.PaymentRequestAsync(merchantCode, amount, description, email, mobile, callBackUrl); authority = response.Body.Authority; if (response.Body.Status == 100) { webView.Visibility = Visibility.Visible; webView.Navigate(new Uri("https://www.zarinpal.com/pg/StartPay/" + authority)); } else ShowMessage("There is a problem in creating authority code.\r\nStatus code: " + response.Body.Status); } متغیر zp که از نوع PaymentGatewayImplementationServicePortTypeClient برای درخواست به وب سرویس زرین پال ساخته شده است. اما سوالی که باقی می ماند این است که این کلاس چگونه ایجاد شده است؟[K هنگامی که در قسمت Add Service Reference وب سرویس زرین پال را اضافه کردیم، ویژوال استدیو به صورت خودکار کلاس های مورد نیازی را که برای ما لازم است با استفاده کد XMLـی که درون آن آدرس وجود داشت ایجاد کرد. متغیر response را با استفاده از تابع PaymentRequestAsync ایجاد کردیم، در این تابع مرچنت کد، هزینه پرداختی، توضیحات، موبایل، ایمیل و آدرس بازگشتی به عنوان پارامتر های ورودی است که مقدار بازگشتی آن از نوع PaymentRequestResponse خواهد بود. درون این متغیر، داده ای به عنوان Body وجود دارد که دارای Authority و Status است. Status وضعیت تراکنش را نشان می دهد. اگر وضعیت برابر با صد بود یعنی درگاه با موفقیت کد Authority را ایجاد کرده و شما می توانید به صفحه شروع پرداخت بروید، شما می توانید معانی کدهای وضعیت ها را در صفحه آخر کتاب "مستندات فنی اتصال به وب سرویس زرین پال" مطالعه نمایید. اگر وضعیت برابر با صفر بود، وب ویو را نمایش می دهیم و سپس آدرس https://www.zarinpal.com/pg/StartPay/ + کد authority را باز می کنیم. چنانچه وضعیت برابر با صد نبود پس خطایی را به کاربر نمایش میدهیم. حال باید تابع رویداد NavigationCompletedـه وب ویو را بنویسیم: async private void webView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args) { // آدرس فعلی ای که وب ویو در آن است string myUrl = sender.Source.ToString(); if (myUrl.Contains(callBackUrl)) { sender.Visibility = Visibility.Collapsed; PaymentGatewayImplementationServicePortTypeClient zp = new PaymentGatewayImplementationServicePortTypeClient(); PaymentVerificationResponse response = await zp.PaymentVerificationAsync(merchantCode, authority, amount); if (response.Body.Status == 100) ShowMessage("Purchase succeed.\r\n RefId in case you need: " + response.Body.RefID); else ShowMessage("There is a problem while purchasing...\r\nStatus code: " + response.Body.Status); } } خب در خط اول این تابع، آدرسی که وب ویو در آن است را با استفاده از مقدار Sourceـه وب ویو میگیریم. سپس شرط می گذاریم چنانچه قسمتی از مقدار این آدرس برابر با آدرس بازگشتی ما بود، شرط درست است. درون بلاک شرط اولین کاری که می کنیم این است که وب ویو را پنهان می کنیم. متغیری از نوع PaymentGatewayImplementationServicePortTypeClient ایجاد می کنیم چون باید پس از پرداخت حتما پرداخت توسط زرین پال تایید گردد. تابع PaymentVerificationAsync برای تاییدیه گرفتن از زرین پال است، این تابع دارای سه پارامتر ورودی است که به ترتیب کد مرچنت، authority مربوط به همین پرداخت و هزینه مربوط به همین را باید در آن وارد کنیم. نوع جواب PaymentVerificationResponse است که دارای متغیری از نوع Body است که این متغیر نیز دو متغیر دیگر در خود دارد، یکی Status یا وضعیت(اگر صد باشد پرداخت با موفقیت انجام شده است)، یکی RefId. RefId: شناسه یکتایی که زرین پال بعد از اتمام موفق تراکنش به پذیرنده می دهد. این شناسه جهت پیگیری های مالی استفاده می گردد. عکس ها: کتاب الکترونیک این آموزش + سورس کد پروژه پیوست شد. امیدوارم همچنان همراه ما باشید... . منبع: وین نویس In App Purchase Sample.zip Zarinpal Payment (In App Purchase).pdf
  15. سلام، کد Xaml: <StackPanel> <TextBlock Text="Battery Status" Margin="10" FontSize="20"/> <StackPanel Margin="10,20,0,0"> <Button Name="getBatteryStatus" Height="40" Width="140" Content="Get Battery Status" Click="getBatteryStatus_Click"/> <TextBlock Name="batteryStatus" Margin="10,20,0,0" Height="50" FontSize="20"/> </StackPanel> </StackPanel> فضاهای نامی مورد نیاز: using Windows.Devices.Enumeration; using Windows.Devices.Power; تابع کلید: private async void getBatteryStatus_Click(object sender, RoutedEventArgs e) { var deviceInfo = await DeviceInformation.FindAllAsync(Battery.GetDeviceSelector()); foreach (DeviceInformation device in deviceInfo) { var battery = await Battery.FromIdAsync(device.Id); var report = battery.GetReport(); double maximum = Convert.ToDouble(report.FullChargeCapacityInMilliwattHours); double remaining = Convert.ToDouble(report.RemainingCapacityInMilliwattHours); double percentage = ((remaining / maximum) * 100); int per = Convert.ToInt32(percentage); batteryStatus.Text = "You have " + per.ToString() + "% battery remaining" ; } } موفق باشید.
  16. سلام، خوشبختانه در ویندوز 10 می توانید با سنسور های زیادی کار کنید. سنسور های زیر از دسته سنسورهایی است که در ویندوز 10 می توان با آن کار کرد: ارتفاع سنج = Altimeter سنسور فعالیت = Activity Sensor فشار سنج = Barometer گام شمار = Pedometer سنسور نزدیکی = Proximity Sensor فضای نامی مورد نیاز: using Windows.Devices.Sensors; ارتفاع سنج ارتفاع سنج برا اندازه گیری ارتفاع نسبی و تغییرات در ارتفاع به ما کمک می کند. ارتفاع سنج دارای رویدادی به نام ReadingChanged است و زمانی اجرا می شود که سنسور ارتفاع سنج مقدار جدیدی احساس کند پراپرتی ReportInterval برای تنظیم فاصله زمانی که سنسور به ما گزارش دهد مورد استفاده قرار میگیرد. نمونه کد: public void GetAltimeter() { Altimeter getAltiude = Altimeter.GetDefault(); AltimeterReading reading = getAltiude.GetCurrentReading(); getAltiude.ReportInterval = 100; getAltiude.ReadingChanged += GetAltiude_ReadingChanged; } private void GetAltiude_ReadingChanged(Altimeter sender, AltimeterReadingChangedEventArgs args) { AltimeterReading readingvalues = args.Reading; } سنسور فعالیت سنسور فعالیت برای شناسایی فعالیت های کاربر بر اساس حرکت وی، مورد استفاده قرار می گیرد. این سنسور برای تشخیص حالات پیاده روی، دویدن، آماده به کار و ... کاربر کمک می کند. این سنسور زمانی که دستگاه حرکت و فعالیت ندارد به حالت "بیکار" می رود و همچنین شما می توانید اطلاعات آنرا در سی روز گذشته دریافت کنید. نمونه کد برای خواندن فعالیت: public async void GetActivity() { ActivitySensor activity = await ActivitySensor.GetDefaultAsync(); var reading = await activity.GetCurrentReadingAsync(); activity.ReadingChanged += new TypedEventHandler < ActivitySensor, ActivitySensorReadingChangedEventArgs > (ReadingChanged); } private void ReadingChanged(ActivitySensor sender, ActivitySensorReadingChangedEventArgs args) { ActivitySensorReading readingActivity = args.Reading; } برای دریافت اطلاعات سی روز گذشته این سنسور: DateTimeOffset last30days = DateTime.Today.AddDays(-30); var details = await ActivitySensor.GetSystemHistoryAsync(last30days); foreach(var values in details) { string newvalue = values.Activity.ToString(); } var trigger = new Windows.ApplicationModel.Background.ActivitySensorTrigger(100); trigger.SubscribedActivities.Add(ActivityType.InVehicle); فشار سنج فشار سنج برای اندازه گیری فشار اتمسفر به کار می رود. فشار سنج دارای رویدادی به نام ReadingChanged است و زمانی اجرا می شود که سنسور فشار سنج مقدار(فشار) جدیدی احساس کند. فشار سنج دارای رویدادی به نام ReadingChanged است و زمانی اجرا می شود که سنسور فشار سنج مقدار جدیدی احساس کند. تابع GetCurrentReading برای دریافت اطلاعات فعلی در این سنسور به کار می رود. نمونه کد: public async void getBarometer() { Barometer barometerValues = Barometer.GetDefault(); BarometerReading reading = barometerValues.GetCurrentReading(); var getPressure = reading.StationPressureInHectopascals; barometerValues.ReportInterval = 150; barometerValues.ReadingChanged += Barometer_ReadingChanged; } private void Barometer_ReadingChanged(Barometer sender, BarometerReadingChangedEventArgs args) { string values = args.Reading.ToString(); } گام شمار گام شمار به شما کمک می کند که تعداد گام های کاربر را زمانی که در حال راه رفتن و دویدن است بشمارید و همچنین به تاریخچه سی روز گذشته آن دسترسی داشته باشید. نمونه کد: public async void pedometer() { Pedometer readings = await Pedometer.GetDefaultAsync(); readings.ReportInterval = 100; readings.ReadingChanged += Readings_ReadingChanged; } private void Readings_ReadingChanged(Pedometer sender, PedometerReadingChangedEventArgs args) { PedometerReading readvalues = args.Reading; if (readvalues.StepKind == PedometerStepKind.Walking) { var walkingsteps = readvalues.CumulativeSteps; } else if (readvalues.StepKind == PedometerStepKind.Running) { var runningSteps = readvalues.CumulativeSteps; } } public async void gettingHistory() { var history = await Pedometer.GetSystemHistoryAsync(DateTime.Now.AddDays(-30)); } برای گرفتن آخرین اطلاعات سی روز گذشته یا یکی از روزها، شما باید با استفاده از تابع GetSystemHistoryAsync و قرار دادن تاریخ در این تابع، به آن دسترسی پیدا کنید. کاربرد اصلی این سنسور تشخیص لمس توسط کاربر میباشد. سنسور نزدیکی سنسور نزدیکی برا تشخیص حضور شئ در بُرد نزدیک یا دور از دستگاه به کار می رود. شما می توانید زمانی که در حال تماس هستید متوجه این سنسور شوید. نمونه کد: ProximitySensor sensor; public void GetProximityStatus() { DeviceWatcher watch; watch = DeviceInformation.CreateWatcher(ProximitySensor.GetDeviceSelector()); watch.Added += Watch_Added; watch.Start(); ProximitySensorReading reading = sensor.GetCurrentReading(); sensor.ReadingChanged += Sensor_ReadingChanged; } private void Sensor_ReadingChanged(ProximitySensor sender, ProximitySensorReadingChangedEventArgs args) { ProximitySensorReading readStatus = args.Reading; } private void Watch_Added(DeviceWatcher sender, DeviceInformation args) { ProximitySensor identified = ProximitySensor.FromId(args.Id); sensor = identified; } نکته: برای کار با این سنسور ها باید در Package.appxmanifestـه برنامه خود در قسمت Capabilties، هر کدام از این سنسور ها را که می خواهید، تیک آنرا بزنید. موفق باشید. منبع: وین نویس
  17. سلام، در نزم افزار های امنیتی گاهی نیاز است که کاربر نتواند از آن صفحه عکس(اسکرین شات) بگیرد. کد زیر برای غیر فعال کردن اسکرین شات گرفتن است: Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().IsScreenCaptureEnabled = false; برای فعال کردن آن نیر فقط کافی است مقدار آنرا برابر با true بگذارید. موفق باشید.
  18. سلام، برای اینکه برنامه شما بتوانید متنی را بخواند، ابتدا باید کنترل MediaElementـی درون صفحه XAML خود بگذارید: <StackPanel FlowDirection="RightToLeft"> <TextBlock Text="خواندن متن" VerticalAlignment="Center" FontSize="20" /> <TextBox Name="txtSpeach" AcceptsReturn="True" TextWrapping="Wrap" Width="300" Height="50" Margin="0,15,0,0" HorizontalAlignment="Left" /> <Button Name="btnSpeal" Content="بخوان" Margin="0,15,0,0" Width="100" Height="30" Click="btnSpeal_Click" /> <MediaElement Name="media" AutoPlay="False" /> </StackPanel> این هم رویداد کلیک دکمه: private async void btnSpeak_Click(object sender, RoutedEventArgs e) { string textToSpeak = txtSpeach.Text; Windows.Media.SpeechSynthesis.SpeechSynthesizer synthesizer = new Windows.Media.SpeechSynthesis.SpeechSynthesizer(); Windows.Media.SpeechSynthesis.SpeechSynthesisStream synthesisStream = await synthesizer.SynthesizeTextToStreamAsync(textToSpeak); media.AutoPlay = true; media.SetSource(synthesisStream, synthesisStream.ContentType); media.Play(); } موفق باشید.
  19. سلام، برای اینکه بخواهید با استفاده از کد، نرم افزار خود را به حالت فول اسکرین در آورید، از تابع زیر استفاده کنید: public static void FullOrDefaultScreen() { var view = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); if (view.IsFullScreenMode) { // حالت عادی view.ExitFullScreenMode(); } else { // فول اسکرین view.TryEnterFullScreenMode(); } } چنانچه برنامه در حالت فول اسکرین بود، با استفاده از این تابع، برنامه به سایز پیشفرض باز خواهد گشت. استفاده: FullOrDefaultScreen(); موفق باشید.
  20. سلام، کلاس زیر به شما کمک می کند که بتوانید بفهمید آیا به اینترنت دسترسی دارید یا خیر، چنانچه دارید با چه چیزی به اینترنت متصل هستید، وایفای یا سلولی. public class NetworkHelper { public enum Network { Mobile, WLAN, Offline = -1 } public static Network GetNetworkProfile() { if (IsInternet() || HasInternet()) { var temp = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile(); if (temp.IsWlanConnectionProfile) return Network.WLAN; else if (temp.IsWwanConnectionProfile) return Network.Mobile; } return Network.Offline; } public static bool IsInternet() { Windows.Networking.Connectivity.ConnectionProfile connections = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile(); bool internet = connections != null && connections.GetNetworkConnectivityLevel() == Windows.Networking.Connectivity.NetworkConnectivityLevel.InternetAccess; return internet; } public static bool HasInternet() { return System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(); } } برای اینکه بفهمید آِیا به اینترنت متصل هستید یا نه، از یکی از دو تابع بازگشتی HasInternet و IsInternet استفاده کنید NetworkHelper.HasInternet(); NetworkHelper.IsInternet(); برای اینکه بفهمید با چه چیزی به اینترنت متصل هستید: NetworkHelper.GetNetworkProfile(); موفق باشید
  21. سلام، برای محاسبه بایت از تابع زیر استفاده کنید: static string SizeSuffix(Int64 value) { string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; if (value < 0) { return "-" + SizeSuffix(-value); } if (value == 0) { return "0.0 bytes"; } int mag = (int)Math.Log(value, 1024); decimal adjustedSize = (decimal)value / (1L << (mag * 10)); return string.Format("{0:n1} {1}", adjustedSize, SizeSuffixes[mag]); } طرز استفاده: SizeSuffix(1245678); موفق باشید.
  22. سلام، برای اینکه بتوانید تشخیص دهید که برنامه شما روی چه دستگاهی در حال اجراست کافی است کلاسی به نام DeviceTypeHelper ایجاد کرده و کدهای زیر را در آن بنویسید: public static class DeviceTypeHelper { public static DeviceFormFactorType GetDeviceFormFactorType() { switch (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily) { case "Windows.Mobile": return DeviceFormFactorType.Phone; case "Windows.Desktop": return Windows.UI.ViewManagement.UIViewSettings.GetForCurrentView().UserInteractionMode == Windows.UI.ViewManagement.UserInteractionMode.Mouse ? DeviceFormFactorType.Desktop : DeviceFormFactorType.Tablet; case "Windows.Universal": return DeviceFormFactorType.IoT; case "Windows.Team": return DeviceFormFactorType.SurfaceHub; default: return DeviceFormFactorType.Other; } } } public enum DeviceFormFactorType { Phone, Desktop, Tablet, IoT, SurfaceHub, Other } برای استفاده: DeviceTypeHelper.GetDeviceFormFactorType(); موفق باشید. منبع: وین نویس
  23. سلام، با استفاده از رویداد PointerPressedـه کنترل های طراحی می توانید بفهمید که آیا کاربر دارد از لمس استفاده می کنید یا مداد یا موس. کد: private void MainPage_PointerPressed(object sender, PointerRoutedEventArgs e) { switch (e.Pointer.PointerDeviceType) { case Windows.Devices.Input.PointerDeviceType.Touch: // تاچ break; case Windows.Devices.Input.PointerDeviceType.Pen: // مداد break; case Windows.Devices.Input.PointerDeviceType.Mouse: // موس break; } } موفق باشید.
  24. به نام پروردگار یگانه چند Style برای زیبا سازی برنامه ها نویسنده: نصراله جوکار طراح: ابوالفضل اسلامی سایت سازنده: وین نویس کاری از استودیو توسعه پارسه تذکر: این آموزش ها را لطفا جایی کپی نکنید، اگر کردید لااقل به اسم خودتان نکنید. این آموزش ها رایگان می باشند. چند روز پیش ابوالفضل برای برنامه جدیدی که داریم میسازیم طراحی هایی کرد که نیاز به ویرایش چند کنترل در برنامه ما شد. این استایل ها + کنترل های ویرایش شده رو برای شما قرار میدهیم تا نرم افزار های زیبایی با آن ها طراحی کنید. نکته: چنانچه چیزی در مورد Style و Template نمیدانید، لطفا آموزش زیر را بخوانید: آموزش تصویری برنامه نویسی ویندوز 10 قسمت شش در این آموزش ما از استایل های ضمنی استفاده می کنیم (چنانچه برای استایلی کلید واژه ای تعریف نکنیم، تمامی کنترل های موجود در صفحه ما که برابر با TargetTypeـه استایل ما هستند، از آن ارث بری می کنند. استایل دهی به ScrollBarـه کنترل ها: استایل زیر را در منابع صفحه(Page.Resources) خود تعریف کنید: <Style TargetType="ScrollBar"> <Setter Property="MinWidth" Value="12" /> <Setter Property="MinHeight" Value="12" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="Foreground" Value="Transparent" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ScrollBar"> <Grid x:Name="Root" Background="#FF0C0C0C"> <Grid x:Name="VerticalPanningRoot" MinHeight="24" Width="15"> <Border x:Name="VerticalPanningThumb" VerticalAlignment="Top" HorizontalAlignment="Center" BorderThickness="0" CornerRadius="3" Width="7" MinHeight="20" Margin="2,0,2,0" Background="#FF181818" /> </Grid> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> برای تغییر رنگ مشکی پس زمینه اسکرول، رنگ Background را در این قسمت تغییر دهید: برای تغییر رنگ اسکرول، رنگ Background را در این قسمت تغییر دهید: استایل دهی به Button برای گوشه دار کردن دکمه ها از استایل زیر استفاده کنید: <Style TargetType="Button"> <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" /> <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" /> <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" /> <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" /> <Setter Property="Padding" Value="8,4,8,4" /> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" /> <Setter Property="UseSystemFocusVisuals" Value="True" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border x:Name="RootGrid" CornerRadius="6" Background="{TemplateBinding Background}"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <Storyboard> <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" /> </Storyboard> </VisualState> <VisualState x:Name="PointerOver"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" /> </ObjectAnimationUsingKeyFrames> <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" /> </Storyboard> </VisualState> <VisualState x:Name="Pressed"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightTransparentBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" /> </ObjectAnimationUsingKeyFrames> <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" /> </Storyboard> </VisualState> <VisualState x:Name="Disabled"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <ContentPresenter x:Name="ContentPresenter" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Content="{TemplateBinding Content}" ContentTransitions="{TemplateBinding ContentTransitions}" ContentTemplate="{TemplateBinding ContentTemplate}" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" AutomationProperties.AccessibilityView="Raw" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> نمونه کد دکمه: <Button x:Name="btnSignUp" Content="Sign-Up" FontSize="14" Height="36" Width="100" FontWeight="Normal" Foreground="White" Background="#26000000" BorderBrush="Transparent" /> استایل دهی به TextBox: <Style TargetType="TextBox"> <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}" /> <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}" /> <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" /> <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundAltHighBrush}" /> <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeDisabledLowBrush}" /> <Setter Property="SelectionHighlightColor" Value="{ThemeResource SystemControlHighlightAccentBrush}" /> <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}" /> <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" /> <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" /> <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto" /> <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" /> <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" /> <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TextBox"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border x:Name="BackgroundElement" Grid.Row="1" CornerRadius="3" Background="#FFE9E9E9" Margin="{TemplateBinding BorderThickness}" Opacity="{ThemeResource TextControlBackgroundRestOpacity}" Grid.ColumnSpan="2" Grid.RowSpan="1" /> <Border x:Name="BorderElement" Grid.Row="1" BorderBrush="#FFE9E9E9" BorderThickness="{TemplateBinding BorderThickness}" Grid.ColumnSpan="2" Grid.RowSpan="1" /> <ContentPresenter x:Name="HeaderContentPresenter" x:DeferLoadStrategy="Lazy" Visibility="Collapsed" Grid.Row="0" Margin="0,0,0,8" Grid.ColumnSpan="2" Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" FontWeight="Normal" Foreground="#33FFFFFF" /> <ScrollViewer x:Name="ContentElement" Grid.Row="1" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" IsTabStop="False" AutomationProperties.AccessibilityView="Raw" ZoomMode="Disabled" /> <ContentControl x:Name="PlaceholderTextContentPresenter" Grid.Row="1" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" IsTabStop="False" Grid.ColumnSpan="2" Content="{TemplateBinding PlaceholderText}" IsHitTestVisible="False"> <ContentControl.Foreground> <SolidColorBrush Color="#FFB4B4B4" /> </ContentControl.Foreground> </ContentControl> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> نمونه کد TextBox: <Border BorderThickness="0" CornerRadius="3" Background="#FFE9E9E9" Height="40"> <TextBox x:Name="txtEmail" Text="" Height="30" TextAlignment="Justify" PlaceholderText="Email" FontWeight="Medium" FontSize="14" IsSpellCheckEnabled="False" VerticalAlignment="Center" Foreground="#FFAAAAAA" Background="#FFE9E9E9" BorderBrush="#FFE9E9E9" /> </Border> نکته: کد بالا Validation رو انجام نمیدهد، برای ساخت Validation (همون علامت تیک که اگه مقادیر درستی وارد شد سبز میشود) باید رویداد TextChanged را برای TextBox ایجاد کنیم: <Border BorderThickness="0" CornerRadius="3" Background="#FFE9E9E9" Height="40"> <Grid> <TextBox x:Name="txtEmail" Text="" Height="30" TextAlignment="Justify" PlaceholderText="Email" Margin="10,2,10,0" FontWeight="Medium" FontSize="14" IsSpellCheckEnabled="False" VerticalAlignment="Center" Foreground="#FFAAAAAA" Background="#FFE9E9E9" BorderBrush="#FFE9E9E9" TextChanged="txtEmail_TextChanged" /> <TextBlock x:Name="tickEmail" Text="" FontFamily="Segoe MDL2 Assets" Foreground="#FFD7D7D7" FontWeight="Medium" Margin="0,0,5,0" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Right" /> </Grid> </Border> فضای نامی زیر را به قسمت فضاهای نامی اضافه کنید: using Windows.UI; حال در کدنویسی، تابع رویداد TextChanged بررسی میکنیم که چنانچه مقدار Textـه TextBox خالی بود یا تعداد کاراکترهای آن کمتر از 5 حرف بود یا که حرف @ را نداشت، رنگ پیش زمینه tickEmail که همان علامت تیک است را به حالت عادی در آورد، در غیر اینصورت رنگ آنرا سبز کنید(یعنی متنی که کاربر وارد کرده است Valid است) private void txtEmail_TextChanged(object sender, TextChangedEventArgs e) { if (sender == null) return; if (string.IsNullOrEmpty(txtEmail.Text) || txtEmail.Text.Length < 5 || !txtEmail.Text.Contains("@") || txtEmail.Text.Contains(" ")) tickEmail.Foreground = new SolidColorBrush(new Color { A = 255, R = 215, G = 215, B = 215 }); else tickEmail.Foreground = new SolidColorBrush(new Color { A = 255, R = 70, G = 233, B = 143 }); } PDF این آموزش پیوست شد. منبع: وین نویس Windows 10 Introduction S01 Styles.pdf
  25. موقع ساخت پروژه جدید از ما میخواد تا بیلد های مورد نظرمون رو انتخاب کنیم . ولی اجازه ساخت پروژه به ما داده نمیشه و ارور "parameter targetplatformversion cannot be null" داده میشه . repair هم کردم ، ولی تاثیری نداشت .