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

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



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

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

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

نوع محتوا


تالار ها

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

گروه


آدرس تارنما


یاهو


اسکایپ


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


شماره تماس


تلگرام


مکان


علایق


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

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

  1. سلام من یک گرید به صورت زیر دارم: <Grid Name="gView" Visibility="Collapsed" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Visible"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <Image Name="imgTitle" MaxHeight="450"/> <TextBlock Name="tbTitlePost" Margin="60,8" TextAlignment="Center" TextWrapping="Wrap" Grid.Row="1" FontFamily="ms-appx:/Other/yekan.ttf#B Yekan" Foreground="#FFE2BC12"/> <WebView ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Grid.Row="2" Name="myView" GotFocus="myView_GotFocus" LoadCompleted="MyView_LoadCompleted" /> </Grid> می خوام با لود شدن اطلاعت در وب ویو، پیج مورد نظر به صورت کلی اسکرول بشه. در اصل اسکرول وب ویو حذف و از طریق گرید gView صورت بگیره. راه حل چیست؟ من از این راه حل استفاده کردم، ولی تاثیری نداشت. http://www.c-sharpcorner.com/UploadFile/269510/disable-webview-scrolling-in-windows-store-apps/
  2. سلام، کد 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
  3. چارچوب 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
  4. با سلام. من توی دیتابیسم، یک موجودیت دارم که مثلا یه آی دی داره و یه اسم و یه کتگوری. توی اون کتگوری هم کاربر میتونه چندین هشتگ بزنه. و ما میخویم سرچ هشتگی بزاریم. کاربر هشتگ رو سرچ کرد، موارد رو با اون هشتگ نشان بده. چطور باید این کارو کنیم ؟
  5. با سلام خدمت شما دوستان عزیز همانطور که قولش را داده بودم، امروز قصد معرفی اولین IDE (محیط برنامه نویسی و اجرای کد) یونیورسال را که توسط مه استودیو توسعه یافته است را دارم . در پستی شما را با زبان برنامه نویسی BrainFuck آشنا کردم و آموزش های لازم را نیز به شما دادم . برین استودیو در حقیقت یک محیط برنامه نویسی یونیورسال (قابل اجرا در کامپیوتر و موبایل) برای زبان برنامه نویسی برین فاک می باشد. برین فاک یکی از زبان های شیرین و سطح پایین محسوب می شود که به دلیل ساده بودن و در عین حال تفکر بر انگیز بودنش، در آموزش زبان برنامه نویسی پایه و استفاده در مسابقات برنامه نویسی کاربرد دارد. از یکی دیگر از کاربرد های برین فاک میتوان به برنامه نویسی نامفهوم (سیستم های امنیتی) اشاره نمود. امیدوارم که این زبان برنامه نویسی و برین استودیو مورد توجه شما قرار بگیرد . منتظر نظرات شما هستیم. دریافت_برین_استودیو_از_استور_مایکروسافت
  6. سلام دوستان بلاخره نرم افزاری که روش کار میکردم به مرحله ای رسید که بشه ارسالش کرد و چند دقیقه پیش ارسال شد. تا الان شاید بیش از 6 بار مدل برنامه رو عوض کردم. مدل برنامه هم یجورایی زیربنای برنامه حساب میشه عوض بشه باید ویو مدل و حتی ویو هم عوض کرد. برنامه سرور هم که دیگه بدترین قسمتش هرچی اینور با جدیدترین api مینویسی انطرف سروراشون از .net های قدیمی استفاده میکنن. دردسر های برنامه زیاده بریم سر اصل مطلب قبل از معرفی چندتا از خروجی هاشو بزارم بعد معرفیش کنم معرفی برنامه: رنگ آمیزی نقاشی ها مدتی است که توسط روان شناسان به عنوان یک «درمان» و جایگزینی برای «مدیتیشن» به افراد بزرگسال توصیه می شود. طبق تحقیقات دانشمندان، انجام فعالیت های هنری می تواند در بروز احساسات، آرام نمودن درگیری های ذهنی، تقویت خودآگاهی، مدیریت رفتاری و اعتیاد، بهبود و تقویت مهارت های اجتماعی، کاهش اضطراب و افزایش اتکای به نفس افراد بالغ نقش بسزایی ایفا کند. همچنین گاهی اوقات علاج بسیاری از مشکلات روحی و عاطفی را باید از درون خود جستجو کرد. برای همین است که روان پزشکان عصر مدرن در جهت رفع مشکلات بیمار، بیش از درمان دارویی به تمرینات ذهنی اتکا می کنند. «هنر درمانی»این روزها به مقوله بسیار مهمی در علم روانشناسی تبدیل شده و توانسته تا نتایج خوب و شگفت آوری برای افراد تحت درمان این روش به جای بگذارد. یکی از شیوه های محبوب هنر درمانی، رنگ آمیزی است و ثابت شده که رنگ آمیزی کتاب به عنوان یک تمرین خوب ذهنی می تواند برای کاهش و درمان اضطراب باورنکردنی ظاهر شود. Colory آرشیوی از نقاشی های بسیار زیبا، اما تهی از رنگ را برایتان گردآوری کرده تا بتوانید به دلخواه رنگ آمیزی شان کنید. طرح های گل و گیاه، حیوانات، نقوش هندسی و همچنین ماندالا که به عقیده برخی رنگ آمیزی شان به افزایش تمرکز کمک شایانی می کند. بنابراین Colory به غیر از نقش تسکین بخشی و سرگرم کنندگی ابزار خوبی برای افزایش تمرکز شما هم هست. Colory ساده ترین اپلیکیشنی ویندوزی است که می شناسیم، آنقدر ساده که خردسال و کهنسال می توانند با آن ارتباط برقرار کنند. روش رنگ آمیزی هم بسیار ساده است؛ مداد رنگی تان را انتخاب کنید و رنگ را به روی نقاط خالی بپاشید. وقتی که رنگ آمیزی تان تکمیل شد، حالا می توانید تصویر را در شبکه های اجتماعی همچون اینستاگرام به اشتراک بگذارید و هنرنمایی تان را به رخ دوستان خود بکشید اگر استرس ها و فشارهای روانی امانتان را بریده اند، بد نیست که ساعاتی از روزتان را به رنگ آمیزی در Colory اختصاص بدهید. شاید هنر درمانی بتواند بیشتر از شرکت در جلسات مشاوره یا مدیتیشن به زندگی پر تشویش تان سر و سامان بدهد. توصیه می کنم حتما رنگ آمیزی نقاشی ها را با آن تجربه کنید. مطمئن باشید که امتحانش نه تنها هیچ ضرری ندارد، بلکه ممکن است Colory که مشابه ای در پلتفرم ویندوز ندارد به اپلیکیشنی تبدیل شود که نتوانید به راحتی از آن دل بکنید. اسکرین شات: لینک: https://www.microsoft.com/store/apps/9nblggh4142s نظرتون چیه؟
  7. سلام دوستان من برنامه ام رو به استور ارسال کردم اما در مرحله سرتیفیکیشن این اخطار داده سر در نمیارم چی میخواد اخه این چیزا رو من انجام دادم App Policies: 10.4.2 Graceful Shutdown Your app must meet Store standards for usability, including, but not limited to, those listed in the subsections below. The app must run on devices that are compatible with the software, hardware and screen resolution requirements specified by the application. If an app is downloaded on a device with which it is not compatible, it should detect that at launch and display a message to the customer detailing the requirements. Apps must continue to run and remain responsive to user input. Apps must shut down gracefully and not close unexpectedly. The app must handle exceptions raised by any of the managed or native system APIs and remain responsive to user input after the exception is handled. The app must start up promptly and must stay responsive to user input. Where applicable, pressing the back button should take the user to a previous page/dialog. If the user presses the back button on the first page of the app, then the app terminates (unless it is allowed to run in the background). Locations: Colorant_1.1.0.0_x86_x64_arm.appxbundle Tested OSes: Windows 10 Desktop, Windows 10 Holographic, Windows 10 Mobile, Windows 10 Surface Hub, Windows 10 Xbox Tested Devices: Acer Iconia W700, Lumia 1520, Lumia 640 Notes To Developer The application terminates unexpectedly in response to user input. Steps to Reproduce: 1. Launch the app. 2. Choose any function like "FLORALS". 3. Notice that the app terminates. Tip: A Windows app may run flawlessly during development and testing, but after submitting it for certification testing, the app may crash or perform unexpectedly. Along these same lines, your app may not perform as expected after publication. This resource, http://support.microsoft.com/kb/2859130, explains the most common reasons for this along with remedies.
  8. سلام دوستان. من دو ماهه دارم رو یه پروژه کار میکنم از همون اول روی مدل برنامه ام شک داشتم تا الان که تکمیل شده و چند بار هم از اول مدل برنامه ام رو تغییر دادم بازم مشکل دارم باهاش. گفتم اینجا بیانش کنم هم مشورتی باشه با دوستان هم شاید بیان تجربه ای باشه برا بقیه. توی برنامه من کاربر یه سری عکس توی دسته بندی های مختلف باید از یه برنامه web api های که براش نوشتم دریافت کنه. یعنی دیتابیس هر هفته یا چند وقت یه بار اپدیت میشه. اولین مشکل من اینه که ایا عکس ها رو به صورت byteArye ذخیره کنم هم سمت سرور هم کلاینت یا نه فقط ادرس رو توی دوتا دیتابیس ذخیره کنم. دومین مشکل من اینه که چطوری دیتابیس های سمت کلاینت و سرور با هم سینک بشن؟ من تا الان از byteArye رو انتخاب کرده بودم و باهاش کار کردم. اما این انتخاب من یه محدودیت داره اونم اینه که مثلا وقتی میخوای مدل دیتابیس کلاینت رو اپدیت کنی باید کل مدل همراه با عکس ها دانلود بشن. دومین مشکل اینم مدل من اینه که من برای کلید خارجی فقط یک متغییر int قرار دادم و این زمانی برنامه رو خراب میکنه که مثلا یه دسته بندی توی سرور با کلاینت ایدی متفاوتی داشته باشه. بنظر خودم اگه فقط ادرس رو ذخیره کنم توی دوتا دیتابیس بهتر باشه. یکی اینکه برای اپدیت ارسال دیتای عکس ها لازم نیست و همچنین میشه عکس ها رو یکی یکی لود کرد بعد که لود شد ذخیره بشن. دوم هم میشه many to one استفاده کرد چون اگه من توی این مدلی که نوشتم بخوام برای مدل دسته بندی هام یه پراپرتی لیست مدل عکس ها بزارم برای دریافت یه دسته باید همه عکس ها رو دریافت کنم. دوستان بنظر شما من چطوری یه مدل برای برنامه ام بنویسم که هم دوتا دیتابیس به صورت صحیح باهم سینک باشن هم دیتای زیادی مصرف نشه؟ این مدل دسته بندی های عکس public class CategoryModel { /// <summary> /// Gets or sets the identifier. /// </summary> public int ID { get; set; } /// <summary> /// Gets or sets the Category name. /// </summary> public string CategoryTitle { get; set; } /// <summary> /// Gets or sets the picture. /// </summary> /// <remarks>Is a blob in the database.</remarks> public byte[] Picture { get; set; } /// <summary> /// Gets or sets the PixelWidth of picture /// </summary> public int PixelWidth { get; set; } /// <summary> /// Gets or sets the pixelHeight of picture /// </summary> public int PixelHeight { get; set; } /// <summary> /// Gets or sets the value for New or Old image. if true = New and false = Old /// </summary> public bool IsNew { get; set; } /// <summary> /// Gets or sets the published Date of Category. /// </summary> public DateTime Date { get; set; } } و اینم مدل عکس ها: public class ImagesModel { /// <summary> /// Gets or sets the identifier. /// </summary> public int ID { get; set; } /// <summary> /// Gets or sets Category ID in Library /// </summary> public int CategoryId { get; set; } /// <summary> /// Gets or sets the foreground picture. /// </summary> /// <remarks>Is a blob in the database.</remarks> public byte[] Picture { get; set; } /// <summary> /// Gets or sets the thumbnail picture. /// </summary> /// <remarks>Is a blob in the database.</remarks> public byte[] Thumbnail { get; set; } /// <summary> /// Gets or sets the picture Name. /// </summary> public string Name { get; set; } /// <summary> /// Gets or sets the PixelWidth of picture /// </summary> public int PixelWidth { get; set; } /// <summary> /// Gets or sets the pixelHeight of picture /// </summary> public int PixelHeight { get; set; } /// <summary> /// Gets or sets the PixelWidth of Thumbnail /// </summary> public int ThumbnailPixelWidth { get; set; } /// <summary> /// Gets or sets the pixelHeight of Thumbnail /// </summary> public int ThumbnailPixelHeight { get; set; } /// <summary> /// Gets or sets the value for payed or free image. if true = payed and false = free /// </summary> public bool IsPayed { get; set; } /// <summary> /// Gets or sets the value for New or Old image. if true = New and false = Old /// </summary> public bool IsNew { get; set; } /// <summary> /// Gets or sets the published Date of picture. /// </summary> public DateTime Date { get; set; } }
  9. بسم الله سلام و عرض ادب خدمت عزیزان توی مطلب قبلی (آموزش ارسال پوش توسط 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 رو انتخاب کنید و اقدام به ارسال کنید. اما این میتونه انتهای کار نباشه! شما میتونید چیزهای زیادی رو تعیین کنید، که به زودی در ادامه خواهم گفت! مثلا میتونید صفحه ای رو برای نمایش کامل جزئیات اعلان اختصاص بدید! موفق باشید!
  10. با عرض سلام. من توی یه قسمتی از نرم افزارم میخوام از چارت خطی استفاده کنم. ​اگه در این زمینه سورس کد، آموزش یا کامپوننت خاصی رو میشناسید به دردم بخوره ممنون میشم معرفی کنید. با تشکر.
  11. سلام به وین نویسی های گرامی، وقت بخیر. در این نمونه کد شما یاد خواهید گرفت که چگونه یک کنترل را با سوایپ به پایین یا بالا با استفاده از انیمیشن پایین بالا کنید (مانند Groove Music) دانلود نمونه کد منبع: وین نویس
  12. سلام به وین نویسی های عزیز، عصر پاییزیتون بخیر، امیدوارم که همیشه سر حال و سر زنده باشید. در این زمان از وین نویس، می خواهیم آموزش کار با انیمیشن ها را با همدیگر فرا بگیریم. دانلود کتاب این آموزش سورس کد این آموزش همچنین شما می توانید از این آموزش که یک آموزش به زبان انگلیسی است نیز استفاده نمایید: َAnimated navigation in Universal Apps سورس کد منبع: وین نویس
  13. سلام به وین نویسی ها، عصر پاییزیتون بخیر، امیدواریم سر حال باشید. پس از انتشار اولین نسخه از سورنا بعضی از دوستان از طریق تلگرام و ایمیل درخواست آموزش ساخت دیتابیس آنلاین رو دادند و اینکه چطوری میشه به دیتابیس سایتی که دارم متصل بشیم. در این آموزش شما به یک دامنه و یک هاست ویندوزی نیاز دارید. برای شروع شما می توانید از سایت زیر هاست ویندوزی را تهیه نمایید. نکته: هاست باید از MySQL پشتیبانی کند. نکته: شما باید گزینه Microsoft Web Developer Tools را نصب کرده باشید. دانلود کتاب الکترونیک آموزش دانلود پروژه UWP (برنامه) دانلود پروژه سایت (ASP) درون فایل فشرده پروژه سایت، دو تا فولدر وجود داره، برای باز کردن پروژه به پوشه Projects بروید و Win Nevis را انتخاب کنید و راه حل را با ویژوال استودیو باز کنید. چون ما پروژه را به صورت سایت ایجاد کردیم، فقط فایل راه حل درون Visual Studio 2015/Projects قرار میگیرد و تمامی کدها و کلاس هایمان درون پوشه Visual Studio 2015/WebSites قرار میگیرند. منبع: وین نویس
  14. پس از ماه ها تلاش تیم توسعه پارسه، بالاخره مفتخریم اعلام نماییم که اولین نسخه از نرم افزار سورنا در استور مایکروسافت برای دستگاه های ویندوز ده منتشر شد. توضیحات نرم افزار: سورنا نرم افزاری است که با آن می توانید به کند و کاو موسیقی در اینترنت بپردازید. سورنا می تواند از هر سایتی که ارائه می دهد، موزیک را برای شما پخش کند. آیا سایتی که دوست دارید، در لیست سایت های سورنا موجود نیست؟ با چند کلیک ساده می توانید سایت مورد نظرتان را به لیست سایت های سورنا اضافه کنید. با سورنا دیگر نگران از دست دادن موسیقی های جدید نباشید. ویژگی های این نسخه: قابلیت ساخت اکانت و لاگین شدن به سورنا قابلیت خرید اکانت و تمدید اکانت قابلیت پشتیبانی از سایت های سورنا قابلیت دریافت تمامی لینک ها قابلیت پخش آنلاین موزیک ها در پس زمینه قابلیت دانلود آهنگ ها، موزیک ویدیو ها و آلبوم ها در پس زمینه قابلیت اضافه کردن سایت ها و موزیک ها به علاقمندی ها قابلیت کپی کردن لینک های دانلود قابلیت اشتراک گذاری موزیک ها با دیگر سورنایی ها محیطی کاملا جذاب و دیدنی و واکنش گرا اسکرین از نسخه دسکتاپ: اسکرین از نسخه موبایل: لینک دانلود: دانلود از استور مایکروسافت منتظر نرم افزار سورنا برای ویندوز دسکتاپ(EXE)، اندروید و آی او اس نیز باشید... . منبع: سورنا
  15. سلام دوستان وین نویسی، شب پاییزیتون بخیر. توسعه نرم افزار سورنا نسخه ویندوز 10(قابل اجرا بر روی تمامی دستگاه های ویندوز 10ـی به جز XBOX) در حال اتمام است. این نرم افزار در حال حاضر از این ویژگی ها برخوردار است: قابلیت ساخت اکانت و لاگین شدن به سورنا قابلیت پشتیبانی از سایت های سورنا قابلیت دریافت تمامی لینک ها قابلیت پخش آنلاین موزیک ها در پس زمینه قابلیت دانلود آهنگ ها، موزیک ویدیو ها و آلبوم ها در پس زمینه قابلیت اضافه کردن سایت ها و موزیک ها به علاقمندی ها قابلیت کپی کردن لینک های دانلود قابلیت اشتراک گذاری موزیک ها با دیگر سورنایی ها محیطی کاملا جذاب و دیدنی و واکنش گرا این نسخه در حال حاضر به استور ارسال شده است، چنانچه توسط مایکروسافت تایید شد، به اطلاع شما دوستان گرامی خواهیم رساند. چنانچه شما نمی دانید سورنا چیست: سورنا نرم افزاری است که با آن می توانید به کند و کاو موسیقی در اینترنت بپردازید. سورنا می تواند از هر سایتی که ارائه می دهد، موزیک را برای شما پخش کند. آیا سایتی که دوست دارید، در لیست سایت های سورنا موجود نیست؟ با چند کلیک ساده می توانید سایت مورد نظرتان را به لیست سایت های سورنا اضافه کنید. با سورنا دیگر نگران از دست دادن موسیقی های جدید نباشید. موسیقی صدای شادی شماست. تصاویری چند از این نرم افزار: منبع: استدیو توسعه پارسه
  16. به نام پروردگار یگانه سلام به وین نویسی ها، صبح جمعه پاییزیتون بخیر، امروز می خواهیم درباره نحوه ساخت چند پوسته کردن برنامه ها حرف بزنیم. ویندوز 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
  17. به نام پروردگار یگانه سلام فراوان خدمت تمامی وین نویسی ها، امیدوارم حالتون خوب باشه. چندی پیش داخل تاپیک های انجمن در مورد پرداخت های درون برنامه ای بعضی از دوستان سوالاتی پرسیده بودند که البته حسام کاشفی عزیز آموزش جامعی رو درباره روش کسب درآمد از فروشگاه مایکروسافت رو توضیح داده، این آموزش رو می تونید از آدرس زیر فرا بگیرید: آموزش کسب درآمد از ویندوز استور در این آموزش، شما با استفاده از درگاه زرین پال می توانید برای نرم افزار خود یک پرداخت درون برنامه ای کوچک راه اندازی کنید. مواردی که شما باید پیش از آنها داشته باشید: 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
  18. سلام، کد 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" ; } } موفق باشید.
  19. سلام، در نزم افزار های امنیتی گاهی نیاز است که کاربر نتواند از آن صفحه عکس(اسکرین شات) بگیرد. کد زیر برای غیر فعال کردن اسکرین شات گرفتن است: Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().IsScreenCaptureEnabled = false; برای فعال کردن آن نیر فقط کافی است مقدار آنرا برابر با true بگذارید. موفق باشید.
  20. سلام، برای اینکه برنامه شما بتوانید متنی را بخواند، ابتدا باید کنترل 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(); } موفق باشید.
  21. سلام، برای اینکه بخواهید با استفاده از کد، نرم افزار خود را به حالت فول اسکرین در آورید، از تابع زیر استفاده کنید: public static void FullOrDefaultScreen() { var view = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); if (view.IsFullScreenMode) { // حالت عادی view.ExitFullScreenMode(); } else { // فول اسکرین view.TryEnterFullScreenMode(); } } چنانچه برنامه در حالت فول اسکرین بود، با استفاده از این تابع، برنامه به سایز پیشفرض باز خواهد گشت. استفاده: FullOrDefaultScreen(); موفق باشید.
  22. سلام، کلاس زیر به شما کمک می کند که بتوانید بفهمید آیا به اینترنت دسترسی دارید یا خیر، چنانچه دارید با چه چیزی به اینترنت متصل هستید، وایفای یا سلولی. 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(); موفق باشید
  23. سلام، برای اینکه بتوانید تشخیص دهید که برنامه شما روی چه دستگاهی در حال اجراست کافی است کلاسی به نام 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(); موفق باشید. منبع: وین نویس
  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. سلام؛ در یک لیست ویو، هر آیتم بنا بر محتوایی که باید نمایش بدهد دارای یک تم (Template) یا همون قالب هست. سوال اول: چطور قالب ها رو به صورت مجزا تعریف کنم؟ سوال دوم: چطور برای هر آیتم از لیست ویو، قالب مربوطه رو استفاده کنم؟ با تشکر.