Войти Регистрация

Docx

  • Рефераты
  • Дипломные работы
  • Прочее
    • Презентации
    • Рефераты
    • Курсовые работы
    • Дипломные работы
    • Диссертациии
    • Образовательные программы
    • Инфографика
    • Книги
    • Тесты

Информация о документе

Цена 35000UZS
Размер 385.5KB
Покупки 0
Дата загрузки 04 Июнь 2025
Расширение doc
Раздел Курсовые работы
Предмет Информатика и ИТ

Продавец

G'ayrat Ziyayev

Дата регистрации 14 Февраль 2025

82 Продаж

WPFda Application sinfi va boshqaruv elementlari shablonini yaratish

Купить
O‘ZBEKISTON RESPUBLIKASI 
OLIY TA’LIM, FAN VA INNOVATSIYALAR
VAZIRLIGI
FARG‘ONA DAVLAT UNIVERSITETI 
« AMALIY MATEMATIKA VA INFORMATIKA »
KAFEDRASI
«  Algoritmik tillar va dasturlash  » fanidan
KURS ISHI
Mavzu: WPFda Application sinfi va boshqaruv elementlari
shablonini yaratish Farg‘ona – 2025   y.  
2 Mundarija
Kirish…………………………………………………………………………….3
I. NAZARIY QISM ………………………………………………...
……….5
1.1. C# dasturlash tili va XAML tili  ……………..……………...….… 5
1.2. WPF ……………… ………………………………………………. 8
1.3. Application sinfi  ………………………………………….…….… 11
1.4. Ilovani ishga tushurish jarayoni(StartUp, ShutDown, Resources)
……………………………………………………………… 13
1.5.  Control va Template tushunchalari … ……...……………………… 17
1.6.  Default Control Template tushunchalari … ……………………...… 19
II. AMALIY QISM ………………………………………………………...
… 22
2.1. Kunlik reja dasturi: masala tavsifi va algoritmi …………………… 22
2.2. Kod tahlili (C#) va dastur natijasi ………………………….……… 23
XULOSA ……………………………………………………………………...… 25
FOYDALANILGAN ADABIYOTLAR  ………………………...………….…  27
ILOVALAR …………………………………………………………………….. 28
3 KIRISH
“Barchamizning maqsadimiz — zamon talablariga javob beradigan, yangi
bilimlarni o‘zlashtirgan, innovatsion fikrlashga ega bo‘lgan kadrlarni
tayyorlashdir.”
Shavkat Mirziyoyev
So nggi   yillarda   O zbekistonda   axborot   texnologiyalari   sohasi   bo yichaʻ ʻ ʻ
kadrlar   tayyorlash   masalasida   juda   katta   ishlar   qilinyapdi.   Chunki   bu   kuchli
mutaxassislarga   bog liq   bo lgan   kasb.   Qo shimcha   texnika   yoki   xizmatlar   talab	
ʻ ʻ ʻ
etilmaydi. Bu yo lda qo yilgan eng katta qadamlar deb – «Bir millionta dasturchi»	
ʻ ʻ
loyihasining   yo lga   qo yilishi,   Muhammad   al-Xorazmiy   nomidagi   IT   maktab   va
ʻ ʻ
IT-Parkning   ochilishi   hamda   boshqa   hududlarda   Raqamli   texnologiyalar   o quv	
ʻ
markazlarining tashkil etilishini aytish mumkin.
Hozirda O zbekistonda eng daromadli soha IT sohasi hisoblanadi. Sabab shu	
ʻ
sohaga   bo lgan   talabning   yuqoriligi   va   shu   soha   mutaxasislarining   yetishmasligi	
ʻ
hisoblanadi.
Kurs   ishining   dolzarbligi:   Zamonaviy   dasturiy   ta’minot   ishlab   chiqishda
foydalanuvchi interfeysining (UI) qulayligi va moslashuvchanligi katta ahamiyatga
ega.   Microsoft   tomonidan   taqdim   etilgan   WPF   (Windows   Presentation
Foundation)   texnologiyasi   bu   borada   kuchli   imkoniyatlarga   ega   bo‘lib,   u
yordamida   grafik   interfeysli   dasturlarni   modulli,   stilga   asoslangan   va   interaktiv
shaklda   yaratish   mumkin.   Ayniqsa,   Application   sinfi   yordamida   ilovaning   ishga
tushish   tartibini   nazorat   qilish,   boshqaruv   elementlari   uchun   esa   shablonlar
(Control   Templates)   orqali   vizual   ko‘rinishni   o‘zgartirish   imkoniyati,   zamonaviy
interfeyslar yaratishda muhim o‘rin tutadi. Shu sababli, mazkur mavzu dasturchilar
uchun ham nazariy, ham amaliy jihatdan dolzarbdir.
Kurs   ishining   maqsadi   va   vazifalari:   Kurs   ishining   asosiy   maqsadi   WPF
texnologiyasida   Application   sinfi   shablonlarini   chuqur   o‘rganishdir.   Bu
yordamida,   dasturlashning   ushbu   jihatlarini   samarali   qo‘llash,   foydalanuvchi
interfeysini   optimallashtirish   va   tizimli   tarzda   ilovalar   yaratish   ko‘nikmalarini
4 shakllantirishga   qaratilgan.   Va   quyidagi   vazifalarga   ega:   WPF   platformasining
imkoniyatlarini   va   uning   xususiyatlarini   o‘rganish,   shuningdek,   XAML   va   C#
tillarini   WPF   bilan   qanday   ishlashini   tushunish.   Application   sinfining   asosiy
vazifalari   va   dastur   jarayonidagi   rolini   batafsil   o‘rganish.   Amaliy   misollar
yordamida   Application   sinfi   va   ControlTemplate   shablonlarini   ishlatib,
foydalanuvchi   interfeysining   dizaynini   optimallashtirish   va   uning   xatti-
harakatlarini boshqarish usullarini ko‘rsatish. Olingan bilimlarni amaliyotga tadbiq
etish   maqsadida   kichik   bir   loyiha   yaratilib,   bunda   Application   sinfi   va
ControlTemplate  shablonlari samarali qo‘llaniladi.
Kurs   ishini   tayyorlashda   foydalanilgan   adabiyotlar   tahlili:   Kurs   ishini
tayyorlashda   quyidagi   manbalardan   foydalanildi:   Microsoft   rasmiy   hujjatlari 1
;
Adam Nathan muallifligidagi  “WPF 4.5 Unleashed” kitobi; A. Troelsenning “Pro
WPF in C#” asari; WPF bo‘yicha onlayn darsliklar va video kurslar 2
; O‘zbekiston
Milliy   kutubxonasi   va   oliy   ta’lim   muassasalarining   o‘quv   adabiyotlari.   Ushbu
manbalar asosida mavzuning nazariy va amaliy asoslari chuqur o‘rganilib, misollar
bilan boyitildi.
Kurs   ishining   nazariy   va   amaliy   ahamiyati:   Nazariy   jihatdan,   kurs   ishi
WPF   asoslarini,   Application   sinfi   va   boshqaruv   elementlari   shablonlari   bilan
bog‘liq bilimlarni tizimli tarzda o‘zlashtirishga xizmat qiladi. Amaliy jihatdan esa,
bu   bilimlar   asosida   real   ilovalar   yaratish,   interfeys   elementlarini   moslashtirish   va
dizayn jihatdan sifatli mahsulotlar ishlab chiqish imkonini beradi. 
Kurs   ishi   tuzilmasining   tavsifi:   Kurs   ishi   kirish,   nazariy,   amaliy   qism
hamda xulosa  va foydalanilgan adabiyotlar  bo‘limlaridan iborat.   Kirish bo‘limida
mavzuning dolzarbligi, maqsadi va vazifalari bayon etiladi.   Nazariy qismda WPF
texnologiyasi,   Application   sinfi   va   boshqaruv   elementlari   haqidagi   asosiy
tushunchalar   tahlil   qilinadi.   Amaliy   qismda   esa   WPF   ilovasi   yaratilib,   misollar
ko‘rsatiladi.   Xulosa   bo‘limida   o‘rganilgan   bilimlar   umumlashtirilib,   taklif   va
tavsiyalar   beriladi.   Foydalanilgan   adabiyotlar   bo‘limida   esa   kurs   ishida
foydalanilgan asosiy manbalar keltiriladi.
1
  (docs.microsoft.com)
2
  (Pluralsight, Udemy)
5 Nazariy qism
1.1-§  C# dasturlash tili va XAML tili
C#   dasturi   90-yillarning   oxirida   ishlab   chiqilib   Microsoft   .NET   ning   bir
qismiga   aylandi.   Alfa   versiya   sifatida   2000   yildan   boshlab   ishlatila   boshladi.   C#
bosh   arxitektori   butun   dunyo   dasturchilari   ichida   birinchilar   qatorida   turgan   va
butun dunyo tomonidan tan olingan dasturlash tilidir. Asoschisi Anders Heylsberg
bo ldi. Uning 1980 yillarda chiqarilgan Turbo Paskal dasturi orqali ham tanishimizʻ
mumkin. C# bevosita C, C++ va Java bilan bog’liq. Chunki bu uchta til dasturlash
olamida eng mashhur tillardir. Bundan tashqari professional dasturchilar C va C++
ni   va   juda   ko pchilik   Java   tilida   ish   yuritadi.   C#   ning   kelib   chiqish   geneologik	
ʻ
daraxti quyidagicha bo ladi	
ʻ :
 
1-rasm. C# ning kelib chiqishi.
6 Chizmada  C  va  C++ tillari  C#  ning  asosini  tashkil   qiladi. Lekin C#  va  Java
o zaro  o zgacha   ravishda   bog’langan.   Ularning  kelib  chiqishi   C  va  C++   bo lsadaʻ ʻ ʻ
o zaro   bir   biridan   farq   qiladi.   C#   tili   ham   obyektga   mo ljallangan   tillar   sirasiga
ʻ ʻ
kiradi. VS 2019 da C# tili yordamida 23 xil loyiha yaratish mumkin. 
- C   dasturlash   tilining   evolyutsiyasi:ALGO-BCPL-B-TraditionC-K&R   C-
ANSI C-ANSI/ISO C99.
-C dasturlash tili Bell labaratoriyasida 1972-yilda   Dennis Ritchie tomonidan
yaratilgan.
-C   dasturlash   tili   kompyuter   dasturlash   tillari   tarixida   eng   ko p   vaqt	
ʻ
foydalanilgan til hisoblanadi.
-C dasturlash tilida 45 ta operator bo lib ular 8 ta guruhga bo linadi.	
ʻ ʻ
-C dasturlash tilida 2 xil konstanta bor. Bular: Primary va Secondary constant.
-C   dasturlash   tili   obyektga  yo naltirilgan   dasturlash   tili   bo lmaganligi   uchun	
ʻ ʻ
Vorislik va Polimforfizm tushunchalari yo ʻ q.
-C   dasturlash   tili   ko plab   boshqa   dasturlash   tillarining   asosi   hisoblanadi.	
ʻ
Misol   uchun   C++,   Java,   Java   Script,   Go,   Rust,   Limbo,   LPC,   C#,   PHP,   Python,
Perl, Verilog va C-shell shular jumlasidan.
C#   leksik   jihatdan   kengaytirilgan,   imperative,   deklarativ,   funksional,
umumiy,   obyektga   yo naltirilgan   (sinfga   asoslangan)   va   komponentlarga
ʻ
yo naltirilgan   dasturlash   fanlarini   o z   ichiga   olgan   umumiy   maqsadli,   ko p	
ʻ ʻ ʻ
paradigmali dasturlash tili. U 1998-2001-yilda Microsoft   kompaniyasi dasturchilari
Anderson   Xeylsberg   va   Skot.V   lar   tomonidan   . NET   tashabbusi   doirasida   ishlab
chiqilgan   va   keyinchalik   Ecma   (ECMA-334)   va   ISO   (ISO/IES23270:2018)
tomonidan xalqaro standart sifatida tasdiqlangan.   Hozirgi kunda C# dasturlash tili
yuqori   bosqichli   dasturlash   tillari   ichida   eng   samarali   dasturlash   tillaridan
hisoblanadi.     C#   dasturlash   tilida   dastur   tuzish   uchun   Visual   Studio   .NET
muhitidan   foydalanamiz.   C#   dasturlash   tili   obyektga   yo naltirilgan	
ʻ   dasturlash   tili
hisoblanadi.   Visual   Studio   .NET   sistemasida   dasturni   kompilyatsiya   qilish   va
bajarishning   bir   necha   usuli   bor.   Ko p   hollarda   dasturchilar   dasturni   alohida	
ʻ
7 kompilyatsiya   qilib   bir   nechta   klavishlar   kombinatsiyalari   orqali   ishlatishga
o rganishgan.ʻ
XAML tili
XAML (eXtensible Application Markup Language) — bu XML (eXtensible
Markup Language)  asosidagi  belgilash (markup)  tili  bo‘lib, asosan   foydalanuvchi
interfeysi   (UI)   yaratishda   ishlatiladi.   U   Microsoft   tomonidan   ishlab   chiqilgan   va
WPF   (Windows   Presentation   Foundation),   UWP   (Universal   Windows   Platform),
Xamarin.Forms   kabi   texnologiyalarda   qo‘llaniladi.   XAML   asosida   foydalanuvchi
interfeyslarini   yaratish   deklarativ   (ya’ni   kod   yozmasdan)   shaklda   amalga
oshiriladi.   Bu   yondashuv   dastur   dizayni   va   funksionalligini   bir-biridan   ajratib
turadi,   bu   esa   texnik   va   dizayner   jamoalarning   alohida   ishlashini   osonlashtiradi.
XAML ning asosiy xususiyatlari :
1. Deklarativ yondashuv:   Interfeys komponentlarini yozma kodsiz, belgilash
orqali yaratish.
2. O‘qish   va  tahrirlash   oson:   XML   sintaksisiga   asoslanganligi   tufayli   oddiy
tuzilishga ega.
3. C#   kodi   bilan   integratsiya:   XAML   fayllari   odatda   .xaml.cs   fayllari   bilan
birga ishlaydi, bunda funksionallik C# tilida yoziladi.
4. Style va Template larni qo‘llab-quvvatlaydi:  UI dizaynini modul va qayta
foydalaniladigan shaklda yozish mumkin.
5. Data   Binding   imkoniyati:   Interfeys   elementlarini   ma’lumotlar   manbaiga
ulash oson.
XAML faylining tuzilishi:
XAML fayli odatda quyidagi tarkibiy qismlardan iborat:
< Window   x:Class = "MyApp.MainWindow"
         xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
         Title = "Asosiy oyna"   Height = "300"   Width = "400" >
     < Grid >
         < Button   Content = "Bos!"   Width = "100"   Height = "30"  />
8      </ Grid >
</ Window >
Bu   yerda:   <Window>   —   asosiy   konteyner   (oyna);   xmlns   —   kerakli
namespacelarni bildiradi;  <Grid>  — layout konteyner;  <Button>  — foydalanuvchi
interfeysi elementi.
Har   bir   .xaml   faylga   code-behind   deb   ataluvchi   .xaml.cs   fayl   mos   keladi.
Ushbu faylda foydalanuvchi tomonidan bajarilgan harakatlarga javob beruvchi C#
kod yoziladi.
  Masalan:   MainWindow.xaml.cs :
private   void   Button_Click ( object  sender, RoutedEventArgs e)
{
    MessageBox.Show( "Button tugmasi bosildi!" );
}
MainWindow.xaml :
< Button   Content = "Button tugmasi"   Click = "Button_Click"  />
XAML quyidagi sohalarda qo'llanilishi mumkin: 
1. WPF (Windows Presentation Foundation)  – desktop ilovalar uchun.
2. UWP (Universal Windows Platform)  – universal Windows ilovalar uchun.
3. Xamarin.Forms  – mobil ilovalar uchun (Android, iOS).
4. MAUI   (Multi-platform   App   UI)   –   bir   necha   platformalarda
ishlaydigan .NET ilovalar uchun yangi yechim.
XAML:   DataBinding,   Triggers,   Converters,   Resource,   Animations   va
Storyboards   kabi   murakkab   imkonyatlarga   ega.   Bu   imkonyatlar   quyidagicha
imkonyatlarni taqdim etadi:
 DataBinding:   Ma’lumotlar   manbaiga   (Model   yoki   ViewModel)
elementlarni bog‘lash.
 Triggers:  Hodisalar asosida stil yoki xatti-harakatlarni o‘zgartirish.
 Converters:  Ma’lumotlar formatini moslashtirish uchun ishlatiladi.
 Resources:  Stil va shablonlarni markazlashgan holda boshqarish.
 Animations va Storyboards:  Interfeysga harakat kiritish imkoniyati.
9 1.2-§   WPF
WPF   (Windows   Presentation   Foundation)   —   bu   Microsoft   tomonidan
yaratilgan va .NET platformasiga asoslangan  foydalanuvchi interfeysi (UI) yaratish
texnologiyasi .   U   2006-yildan   beri   Windows   ilovalarini   ishlab   chiqishda
qo‘llaniladi   va   zamonaviy,   grafik   jihatdan   boy   interfeyslar   yaratish   imkonini
beradi. WPF —   declarative-XAML   va   imperative-C#   yondashuvlar birlashmasiga
tayanadi. Bu yondashuv uni kuchli, modul va qulay platformaga aylantiradi. WPF
arxitekturasi   bir   necha   asosiy   qatlamlardan   (layer)   iborat   bo‘lib,   har   biri   o‘zining
alohida   vazifasiga   ega.   Quyida   asosiy   komponentlar   va   ularning   funksiyalari
keltirilgan:
1. Presentation Framework
Bu qatlam  asosiy UI elementlari  va xatti-harakatlarini o‘z ichiga oladi:
 Button ,  TextBox ,  ComboBox  kabi tayyor boshqaruv elementlari.
 Window ,  Page ,  UserControl  — asosiy konteynerlar.
 DataBinding ,  Styles ,  Templates ,  Animation  funksiyalari.
Bu qatlam dasturchilar bilan eng ko‘p aloqada bo‘ladigan qatlamdir.
2. PresentationCore
Bu   qatlam   —   grafik   obyektlar   (Visual,   UIElement)   bilan   ishlash   imkonini
beradi. U  Shapes ,  Drawing ,  Geometry ,  Brush ,  Transform  kabi komponentlarni o‘z
ichiga   oladi.   Bu   qatlam   interfeysning   vizual   qismini   chizish   va   boshqarishni
ta'minlaydi.
3. WindowsBase
Infrastructure   (infratuzilma)   qatlami .   Bu   qatlam   butun   WPF   ilovasi   uchun
umumiy sinflarni o‘z ichiga oladi:
 DependencyObject ,  DispatcherObject ,  Application ,  ResourceDictionary .
 Xotirani boshqarish, eventlar bilan ishlash, va threading.
WPFning eng asosiy sinflari aynan mana shu qatlamda joylashgan.
4. MilCore (Media Integration Layer)
10 Bu   past   darajali,   native   qatlam   bo‘lib,   PresentationCore   bilan   DirectX
orasidagi   bog‘lovchi   interfeys   hisoblanadi.   U   foydalanuvchiga   to‘g‘ridan-to‘g‘ri
ochilmaydi, lekin butun rendering jarayonini boshqaradi. WPF vizual elementlarini
GPU yordamida chizish  uchun aynan  MilCore  javobgar.
5. DirectX
WPF   interfeyslarining   grafik   qismlarini   chizishda   Microsoftning   DirectX
texnologiyasidan   foydalanadi.   Bu   yordamida   hardware   acceleration   (qattiq   disk,
video karta kuchi) amalga oshiriladi. Bu esa WPF ilovalarini tez, silliq va resursni
tejaydigan qiladi.
WPF arxitekturasi quyidagi xususiyatlarga ega:
✅   Vector-based rendering  — har qanday o‘lchamdagi ekranlar uchun sifatli 
tasvir.
✅   Resolution independence  — interfeys aniqligi ekran zichligidan mustaqil.
✅   Hardware acceleration  — grafik chizish GPU orqali amalga oshiriladi.
✅   Separation of concerns  — dizayn va logika ajratilgan (XAML vs. C#).
✅   Style, Template, Theme  —  qo‘llab-quvvatlanadi.
✅   Data Binding, Command, Resource  —  model  mavjud.
WPF ning boshqa arxitektura yondashuvlari bilan farqi:
Platforma UI yaratish
usuli Grafik
texnologiya Ma’lumot bilan
bog‘lash (Data
Binding) Shablonlash
WinForms Imperative
(kod) GDI+ Minimal Yo‘q
WPF Declarative
(XAML) DirectX Keng qamrovli Bor
UWP Declarative
(XAML) Direct2D Keng qamrovli Bor
11 WPF   arxitekturasi   yuqori   darajadagi   modullikka   ega   bo‘lib,   foydalanuvchi
interfeyslarini   yaratishda   kuchli   vositalarni   taqdim   etadi.   U   yuqori   unumdorlik,
moslashuvchanlik,   grafik   sifat   va   zamonaviy   yondashuvlar   bilan   ajralib   turadi.
Aynan shu jihatlar WPFni korporativ va grafik jihatdan boy ilovalar yaratishda eng
zo‘r tanlovlardan biriga aylantiradi.
1.3-§   Application sinfi
WPF ilovalarida barcha dasturlar   Application   sinfi asosida ishga tushadi. Bu
sinf ilovaning resurslar, navigatsiya, oynalarni boshqarish kabi  asosiy funksiyalarni
boshqaradigan   markaziy   obyekt   hisoblanadi.   System.Windows.Application   —   bu
WPFda   mavjud   bo‘lgan   asosiy   sinf   bo‘lib,   u:   Ilovaning   ishlashini   boshlaydi   va
yakunlaydi.   Oynalarni   boshqaradi   ( MainWindow ,   boshqa   Window lar).   Global
darajadagi   resurslar ni   taqdim   etadi.   Foydalanuvchi   sessiyasi   va   xatoliklarini
kuzatadi.  App.xaml  bilan birgalikda ishlaydi.  Application sinfi odatda App.xaml.cs
faylida kengaytiriladi.
Application sinfining asosiy vazifalari:
Funksiya Tavsif
Ilovani ishga tushirish Application.Run()   orqali   asosiy   oyna
(MainWindow) ishga tushadi.
Resurslarni boshqarish Application.Resources   —   global   Style ,   Brush ,
Template .
Bir   nechta   oynani   qo‘llab-
quvvatlash Application.Windows   orqali   barcha   ochiq
oynalarni boshqaradi.
Hodisalarni ushlash
Startup ,  Exit ,  DispatcherUnhandledException .
Sessiya holatini boshqarish
SessionEnding ,  Deactivated ,  Activated .
Buyruqlarni   markazlashgan
boshqarish CommandBinding ,  InputBinding .
Application hodisalari:
Hodisa Tavsifi
Startup Ilova ishga tushayotganda chaqiriladi .
12 Hodisa Tavsifi
Exit Ilova yopilayotganda chaqiriladi .
DispatcherUnhandledException Xatoliklar tutib olinmasa, bu yerda ushlanadi.
SessionEnding Kompyuter   o‘chirilayotgan   yoki   foydalanuvchi
chiqayotgan holatlarda chaqiriladi.
Misol: Applicationdan foydalanish
public   partial   class   App  :  Application
{
     protected   override   void   OnStartup ( StartupEventArgs e )
    {
         base .OnStartup(e);
        MainWindow main =  new  MainWindow();
        main.Show();
    }
}
App.xaml va App.xaml.cs fayllarining funksiyasi:
1. App.xaml fayli
Bu fayl — WPF ilovasining   kirish nuqtasi   bo‘lib,   Application   sinfi uchun
XAML   konfiguratsiyasini   taqdim   etadi.   Bu   yerda   ilovaning   umumiy   resurslari,
ishga tushirish sozlamalari va boshlang‘ich oyna ( StartupUri ) belgilanadi.
Strukturasi:
< Application   x:Class = "MyApp.App"
              StartupUri = "MainWindow.xaml"
              xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" >
     < Application.Resources >
         <!-- Global resurslar, Style, DataTemplate -->
     </ Application.Resources >
</ Application >
13 StartupUri   —   Bu   atribut   dastur   ishga   tushganda   birinchi   ochiladigan   oyna
(Window)ni belgilaydi.
Application.Resources   —   Bu   qismda   butun   ilova   bo‘yicha   ishlatiladigan   Style ,
Brush ,  Template  kabi resurslar joylashtiriladi.
2. App.xaml.cs fayli
Bu   fayl   —   App.xaml   bilan   bog‘langan   code-behind   (C#   kod)   faylidir.   U
Application   sinfidan   meros   olib,   ilovaning   ishga   tushishi,   yopilishi,   va   global
eventlar ni boshqaradi.
Misol:
public   partial   class   App  :  Application
{
     private   void   Application_Startup ( object  sender, StartupEventArgs e)
    {
        MainWindow window =  new  MainWindow();
        window.Show();
    }
     private   void   Application_Exit ( object  sender, ExitEventArgs e) {}
}
Application sinfi va unga bog‘liq App.xaml hamda App.xaml.cs fayllari   —
WPF   ilovasining   yuragi   hisoblanadi.   Ular   yordamida   ilovaning   hayot   aylanishi,
resurslari, boshlanish tartibi  va xatoliklar ustidan to‘liq nazorat amalga oshiriladi.
Bu   tizimli   yondashuv   WPF   ilovalarining   barqaror   va   kengaytiriladigan   bo‘lishini
ta’minlaydi.
1.4-§   Ilovani ishga tushurish jarayoni: Startup, Shutdown, Resources
WPF (Windows Presentation Foundation) ilovalarida   ilovani ishga tushirish
(Startup)   va   yopish (Shutdown)   jarayonlari muhim rol o‘ynaydi. Ushbu jarayonlar
Application   sinfi   va   unga   bog‘liq   App.xaml   /   App.xaml.cs   orqali   boshqariladi.
Shuningdek,   ilovada   umumiy   ishlatiladigan   Resources   (resurslar)   tushunchasi
14 muhim   ahamiyatga   ega   bo‘lib,   foydalanuvchi   interfeysini   modullashtirish   va
yagona uslubni ta’minlashda qo‘llaniladi.
1. Ilovani ishga tushurish —  Startup  jarayoni
  Ishlash ketma-ketligi:
1. App.xaml fayli  yuklanadi
2. Application  sinfi obyektga aylantiriladi
3. Startup  hodisasi ishga tushadi
4. Ilovaning asosiy oynasi ( MainWindow ) ochiladi
StartupUri  orqali avtomatik boshlanish
App.xaml faylida:
< Application   x:Class = "MyApp.App"
              StartupUri = "MainWindow.xaml" >
</ Application >
Bu yondashuvda  MainWindow  avtomatik ishga tushadi.
Kod orqali boshlanish (App.xaml.cs)
Agar boshlanishda foydalanuvchi  avtorizatsiyadan o‘tishi yoki turli shartlar
tekshirilishi kerak bo‘lsa, kod orqali oynani ochish maqsadga muvofiq:
public   partial   class   App  :  Application
{
     protected   override   void   OnStartup ( StartupEventArgs e )
    {
         base .OnStartup(e);
        
         // Dinamik boshlanish
        LoginWindow login =  new  LoginWindow();
         if  (login.ShowDialog() ==  true )
        {
            MainWindow main =  new  MainWindow();
            main.Show();
        }
15          else
        {
             // Ilovani to‘xtatish
            Shutdown();
        }
    }
}
Startup  hodisasidan foydalanish:
private   void   Application_Startup ( object  sender, StartupEventArgs e)
{
     // Custom ishga tushirish jarayoni
}
2. Ilovani yopish —  Shutdown  jarayoni
Ilova quyidagi holatlarda yopiladi:
 Foydalanuvchi asosiy oynani yopadi
 Application.Shutdown()  chaqiriladi
 Operatsion tizim tomonidan ilova majburan yopiladi
  ShutdownMode  (yopilish rejimi)
App.xaml.cs faylida ilovani qanday yopish kerakligini aniqlash mumkin:
App.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
Rejim Tavsif
OnLastWindowClose So‘nggi oyna yopilganda ilova to‘xtaydi (default)
OnMainWindowClose Faqat asosiy oyna yopilganda to‘xtaydi
OnExplicitShutdown Faqat   Application.Shutdown()   chaqirilgandagina
yopiladi
Exit  va  SessionEnding  hodisalari:
private   void   Application_Exit ( object  sender, ExitEventArgs e)
{
     // Ilova yopilayotganda loglarni saqlash yoki tozalash
}
16 private   void   Application_SessionEnding ( object   sender,
SessionEndingCancelEventArgs e)
{
     // Kompyuter o‘chirilayotganda ogohlantirish
}
  3. Application Resources — umumiy resurslar boshqaruvi
WPF   ilovalarida   ko‘p   marotaba   ishlatiladigan   UI   elementlari   —   ranglar,
shriftlar,   uslublar,   DataTemplate ,   ControlTemplate   va   boshqa   komponentlar
Application.Resources  qismida saqlanishi mumkin.
 Misol: App.xaml’da global  Style  yaratish
< Application.Resources >
     < SolidColorBrush   x:Key = "MainColor"   Color = "CornflowerBlue"  />
     < Style   TargetType = "Button" >
         < Setter   Property = "Background"   Value = "{StaticResource MainColor}"  />
         < Setter   Property = "FontWeight"   Value = "Bold" />
     </ Style >
</ Application.Resources >
Bu resurslar butun ilova bo‘ylab ishlatilishi mumkin.
Dy namic v a St at ic Resource farqi
Turi Tavsif
StaticResource Dastlab yuklanadi, ish vaqtida o‘zgarmaydi
DynamicResource Ish vaqtida yuklanadi, o‘zgarishga moslashadi
Resurslarga murojaat qilish (XAML va C# orqali)
XAML:
< TextBlock   Foreground = "{StaticResource MainColor}"  />
C# da:
var  color = (Brush)Application.Current.Resources[ "MainColor" ];
WPF   ilovasining   ishga   tushish   va   yopilish   jarayonlari   —   ilovaning   barqaror
ishlashi,   foydalanuvchi   tajribasi   va   xatoliklar   boshqaruvida   muhim   rol   o‘ynaydi.
Startup ,   Shutdown   va   Resources   kabi   komponentlar   yordamida:   Ilovani
17 moslashuvchan   boshlash   va   yopish   mumkin.   Kod   bilan   yoki   XAML   orqali
oynalarni   boshqarish   osonlashadi.   Umumiy   resurslar   orqali   interfeysni
markazlashtirib   boshqarish   qulaylashadi.   Shu   tarzda   WPF   ilovasi   mustahkam,
modular va professional dasturiy yechimga aylanishi mumkin.
1.5-§   Control va Template tushunchasi
WPF   dasturlashda   foydalanuvchi   interfeysi   komponentlarini   yaratish   va
sozlash   uchun   Control   (boshqaruv   elementlari)   va   Template   (shablonlar)
tushunchalari   muhim   o‘rin   tutadi.   WPFning   kuchli   tomonlaridan   biri   bu   —
foydalanuvchining   estetik,   zamonaviy   va   individual   interfeys   yarata   olish
imkoniyatidir. Bu imkoniyat aynan  Control va Template  tizimi orqali ta'minlanadi.
Control — boshqaruv elementlari
Control   —   foydalanuvchi   interfeysida   ko‘rinadigan,   interaktiv   elementlar
bo‘lib, ular orqali foydalanuvchi va dastur o‘zaro aloqada bo‘ladi.
Misollar:
 Button
 TextBox
 ComboBox
 CheckBox
 ListView
 Slider
 DatePicker  va boshqalar
Controllar   System.Windows.Controls.Control   sinfidan   meros   oladi   va   o‘ziga   xos
vizual ko‘rinishga ega bo‘ladi.
Controllarning xossalari:
Xossa Tavsif
Content Boshqaruv elementining ichidagi kontent
Style Tashqi ko‘rinishni sozlovchi xossalar to‘plami
18 Xossa Tavsif
Template Controlning to‘liq vizual shabloni (ControlTemplate)
DataContext Ma’lumot modeli bilan bog‘lanish
Template   —   bu   boshqaruv   elementining   vizual   strukturasi   va   ko‘rinishini
belgilovchi  XAML asosidagi  shablondir.
WPFda ikki turdagi shablon mavjud:
1. ControlTemplate  —  Controlning to‘liq ko‘rinishini qayta belgilash
2. DataTemplate   —   Ma’lumotlarni   qanday   ko‘rsatishni   belgilovchi   shablon
ControlTemplate
Misol: Button uchun ControlTemplate:
<Button Content="OK" Width="100" Height="40">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Background="DarkCyan" CornerRadius="8">
                                <ContentPresenter   HorizontalAlignment="Center"
VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>
Bu   yerda   odatdagi   tugma   o‘rniga,   burchaklari   yumaloqlangan   va   fon   rangi
o‘zgartirilgan o‘ziga xos ko‘rinish yaratilmoqda.
DataTemplate
DataTemplate   —   ListBox,   ListView   va   boshqa   ma’lumot   chiqaruvchi
kontrollerlarda   qo‘llaniladi.   U   orqali   elementlar   qanday   ko‘rinishda   bo‘lishi
belgilab beriladi.
Misol :
<ListBox ItemsSource="{Binding Students}">
    <ListBox.ItemTemplate>
        <DataTemplate>
19             <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" FontWeight="Bold"/>
                <TextBlock Text=" - " />
                <TextBlock Text="{Binding Grade}" Foreground="DarkGreen"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Control va Template o‘zaro aloqasi
WPFda har bir boshqaruv elementi (Control) o‘zining  Default ControlTemplate
ga   ega.   Agar   bu   sizni   qoniqtirmasa,   siz   uni   yangi   ControlTemplate   bilan
almashtirishingiz   mumkin.   Bu   orqali   siz:   Maxsus   dizayn   yaratishingiz,
brendingizga   moslashtirishingiz,   animatsiya   va   holatlarni   qo‘shishingiz   (Visual
States orqali) mumkin bo‘ladi.
Control   va   Template   WPF   dasturlashning   UI   sohasidagi   eng   kuchli
vositalaridan biridir. Ular yordamida siz:
 Tayyor boshqaruv elementlardan foydalanasiz (Control)
 Ularning ko‘rinishini to‘liq o‘zgartira olasiz (ControlTemplate)
 Ma’lumotlarni vizual jihatdan boy tarzda taqdim etasiz (DataTemplate)
Bu   moduliy   yondashuv   dastur   interfeysining   moslashuvchanligi   va   estetik
jihatdan mukammalligini ta’minlaydi.
1.6-§  Default Control Template tushunchalari
WPFning   asosiy   kuchli   jihatlaridan   biri   bu   —   foydalanuvchi   interfeysini
to‘liq   sozlash   imkoniyatidir.   Har   bir   Control   (boshqaruv   elementi)   standart
(default)   ko‘rinishga   ega   bo‘lib,   bu   ko‘rinish   ControlTemplate   orqali   belgilangan
bo‘ladi.   Default Control Template   bu — WPF elementlarining   Visual Studio yoki
Framework tomonidan berilgan standart shablonlari  hisoblanadi.
20 Default   Control   Template   —   bu   har   bir   WPF   boshqaruv   elementi   ( Button ,
TextBox ,  ComboBox ,  CheckBox  va h.k.) uchun  standart holatda taqdim etiladigan
ko‘rinish va interaktivlikni belgilovchi XAML asosidagi shablon   hisoblanadi.
Har bir  ControlTemplate  odatda quyidagilarni o‘z ichiga oladi:
Element Tavsifi
Visual Tree Control ichidagi vizual elementlar ierarxiyasi
ContentPresenter Control’ning kontent qismini chiqarish uchun joy
Triggers Holatlarga (Hover, Pressed, Disabled) bog‘liq vizual javoblar
TemplateBinding Control   xossalarini   Template   ichiga   uzatish   mexanizmi
( Background ,  BorderBrush )
  Misol: Buttonning Default Template (soddalashtirilgan)
<ControlTemplate TargetType="Button">
    <Border Name="border" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}">
        <ContentPresenter 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="border" Property="Background" Value="Gray"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
Bu   yerda   tugma   bosilganda   fon   rangi   kulrangga   (Gray)   o‘zgaradi.
ContentPresenter  esa tugmaning matnini ko‘rsatadi.
Default Template va Custom Template:
21 Xususiyat Default Control Template Custom Control 
Template
Beriladi WPF tomonidan avtomatik 
taqdim etiladi Dasturchi tomonidan 
yaratiladi
Ko‘rinishi Klassik va universal To‘liq moslashtirilgan
Qayta ishlash 
kerakmi Yo‘q (faqat o‘zgartirish kerak 
bo‘lsa) Ha (o‘zingiz yozasiz)
Moslashuvchanlik Cheklangan To‘liq nazorat
22 AMALIY QISM
2.1-§ Kunlik reja dasturi: masala tavsifi va algoritmi
Masala tavsifi
Zamonaviy hayotda vazifalarni samarali boshqarish, vaqtni rejalashtirish va
ularni nazorat qilish har bir shaxs uchun muhim ahamiyat kasb etadi. Kunlik reja
dasturlari bu borada foydalanuvchiga vazifalarini belgilash, ularni bajarilgan yoki
bajarilmagan   holatlarda   ajratish,   vaqti   bilan   nazorat   qilish   hamda   statistik   tahlil
qilish imkonini beradi.
Taqdim   etilayotgan   "MyToDo"   nomli   WPF   (Windows   Presentation
Foundation) ilovasi foydalanuvchiga quyidagi funksionalliklarni taqdim etadi:
 Yangi vazifani kiritish va uni muddat (deadline) bilan birga saqlash.
 Har bir vazifa uchun bajarilgan yoki bajarilmagan holatni belgilang.
 Foydalanuvchi interfeysida vazifaning holatiga qarab vizual rang o‘zgarishi.
 Vazifalarni JSON formatida faylga saqlash va qayta yuklash imkoniyati.
 Kunlik statistikani (jami, bajarilgan, bajarilmagan vazifalar soni) ko‘rsatish.
 Dark Mode rejimini yoqish/o‘chirish imkoniyati.
Algoritm tavsifi
Ilova quyidagi asosiy algoritmlarga asoslanadi:
1. Foydalanuvchi tomonidan vazifa kiritilishi:
o Matn maydoniga vazifa yoziladi va istalgan holatda sana tanlanadi.
o “Qo‘shish” tugmasi bosilgach, vazifa  TaskItem  obyektiga o‘tkaziladi.
2. Vazifani interfeysga chiqarish (vizual panel):
o Har bir vazifa uchun  StackPanel  hosil qilinadi.
o Vazifa matni, deadline va o‘chirish tugmasi bu panelga joylashtiriladi.
o Deadlinega qarab rang belgilanadi:
 O‘tgan sana:  qizil (LightCoral) ;
 Bugungi sana:  sariq (Khaki) ;
 Kelgusi sana:  yashil (LightGreen) .
23 3. Vazifalarni saqlash va yuklash:
o Saqlashda barcha paneldagi ma’lumotlar  List<TaskItem>  ko‘rinishiga
o‘tkaziladi va  todo.json  fayliga yoziladi.
o Dastur   ishga   tushganda   fayldan   vazifalar   o‘qilib,   interfeysga   qayta
yuklanadi.
4. Statistikani hisoblash:
o Har   bir   vazifa   tekshirib   chiqiladi   va   holatiga   qarab
bajarilgan/bajarilmagan hisoblanadi.
o Natijalar  Label  orqali foydalanuvchiga chiqariladi.
5. Dark Mode funksiyasi:
o Tugma bosilganda interfeysning fon va matn ranglari almashtiriladi.
2.2. Kod tahlili (C#) va dastur natijasi
Kodning asosiy qismlari tahlili
Model sinf:  TaskItem
public class TaskItem
{
string Text { get; set; }
public bool IsDone { get; set; }
public string Deadline { get; set; }
}
Bu   sinf   vazifa   uchun   zarur   bo‘lgan   asosiy   atributlarni   (matn,   holat,   deadline)
saqlaydi va JSON formatida serialize 3
 qilinadi.
1. Vazifa qo‘shish:  BtnQoshish_Click
o Yangi   TaskItem   yaratilib,   PanelYaratish   funksiyasi  orqali interfeysga
chiqariladi.
o Har   safar   yangi   vazifa   qo‘shilgach,   faylga   saqlanadi   va   statistika
yangilanadi.
2. Panel yaratish:  PanelYaratish()
3
Serialize (serializatsiya)  — bu dasturdagi  obyektni (ma’lumotlar tuzilmasini) ketma-ket baytlarga aylantirish  
jarayonidir.
24 o Har bir vazifa uchun vizual elementlar dinamik tarzda yaratiladi.
o Deadline sanasiga qarab fon rangi belgilanadi.
o CheckBox   holatining   o‘zgarishi   avtomatik   tarzda   ma’lumotlarni
saqlash va statistika yangilanishiga olib keladi.
3. Ma’lumotni saqlash va yuklash:  Saqlash() ,  Yuklash()
o JsonConvert.SerializeObject()  yordamida faylga yoziladi.
o Ilova ishga tushganda fayldan   JsonConvert.DeserializeObject()   orqali
yuklanadi.
4. Statistika hisoblash:  YangilashStatistika()
o ListBox ichidagi har bir vazifa tekshiriladi.
o Jami, bajarilgan va bajarilmagan sonlar ajratilib,  Label da ko‘rsatiladi.
5. Dark Mode:  BtnDarkMode_Click()
o Foydalanuvchi interfeysining fon va matn ranglari almashtiriladi.
o darkModeOn  flag yordamida holat nazorat qilinadi.
Xulosa va dastur natijasi
Dastur   o‘zining   soddaligi   va   funksionalligi   bilan   ajralib   turadi.   Uning
yordamida foydalanuvchi:
 Yangi vazifalar qo‘shadi va ularni muddatga bog‘laydi;
 Bajarilgan holatni belgilaydi va statistikani ko‘radi;
 Vazifalarni avtomatik saqlab, ilova qayta ishga tushganda yuklaydi;
 Estetik jihatdan farqlanadigan interfeysga ega (masalan, Tungi rejim).
Dastur   muvaffaqiyatli   tarzda   ishlaydi   va   real   hayotdagi   vazifalarni   boshqarish
ehtiyojlarini   qondira   oladi.   Kod   tuzilmasi   modulyar   va   kengaytiriladigan   bo‘lib,
kelajakda   sinxronizatsiya   (masalan,   cloud   saqlash)   yoki   mobil   ilovalar   bilan
integratsiyalash kabi imkoniyatlar qo‘shilishi mumkin.
25 XULOSA
Ushbu   kurs   ishida   WPF   (Windows   Presentation   Foundation)
texnologiyasining   asosiy   —   Application   sinfi   va   boshqaruv   elementlari   (Control)
shablonlari bilan ishlash jarayoni batafsil o‘rganildi. WPF ilovalarini yaratishda C#
dasturlash   tili   va   XAML   tilining   o‘zaro   uyg‘unligi,   ularning   birgalikda   ishlashi
natijasida qulay, samarali va chiroyli interfeyslar yaratish imkoniyati ta’kidlandi.
Application   sinfi — WPF ilovasining yuragi  hisoblanadi. Bu sinf ilovaning
ishga   tushirilishi   (StartUp),   resurslar   bilan   ishlash,   hamda   yopilish   (ShutDown)
jarayonlarini boshqaradi. Application sinfi yordamida ilovaning umumiy resurslari
— stil, ranglar, shablonlar kabi elementlarni markaziy joyda saqlash mumkin. Bu
esa ilova tarkibidagi barcha komponentlarda yagona dizayn va funktsional birlikni
ta’minlash   imkonini   beradi.   Shu   tariqa,   Application   sinfi   ilovaning   boshqaruv
jarayonlarini markazlashgan holda samarali tashkil etishda muhim ahamiyatga ega.
WPF texnologiyasida   Control   tushunchasi foydalanuvchi interfeysining eng
muhim qismi  hisoblanadi. Tugma, matn kiritish maydoni, ro‘yxatlar kabi ko‘plab
elementlar Control sinfidan vorislik olgan. Har bir Controlning ko‘rinishi va xatti-
harakatlari   Template   orqali   aniqlanadi.   Template   kontent   va   tashqi   ko‘rinishni
butunlay   ajratishga,   boshqaruv   elementlarini   to‘liq   moslashtirishga   imkon   beradi.
Bu   esa   dasturchilarga   va   dizaynerlarga   foydalanuvchi   interfeysining   ko‘rinishini
o‘zgartirishda cheksiz imkoniyatlar yaratadi.
Default   Control   Template   —   bu   WPF   tomonidan   har   bir   boshqaruv
elementiga avtomatik ravishda beriladigan standart shablon. U orqali elementning
asosiy ko‘rinishi  va funktsiyasi  aniqlanadi. Lekin foydalanuvchi  ehtiyojiga qarab,
bu   shablon   o‘zgartirilishi,   yangidan   yaratilishi   yoki   butunlay   almashtirilishi
mumkin. Bu jihat WPFning eng kuchli tomonlaridan biri bo‘lib, ilovalarni yanada
noyob va o‘ziga xos ko‘rinishda yaratishga yordam beradi.
Shuningdek,   kurs   ishida   ilovani   ishga   tushirish   va   yopish   jarayonlari
(StartUp   va   ShutDown)   ham   muhim   bosqichlar   sifatida   ko‘rib   chiqildi.   Bu
jarayonlar   Application   sinfi   tomonidan   boshqariladi   va   ilovaning   resurslarini
26 samarali   yuklash   hamda   tozalashni   ta’minlaydi.   Resurslar   tizimi   (Resources)   esa
ilova   bo‘ylab   umumiy   elementlarni   takroran   ishlatishni   osonlashtiradi,   shu   bilan
kodni optimallashtiradi va texnik xizmat ko‘rsatishni soddalashtiradi.
Umuman olganda, WPF texnologiyasi va uning Application sinfi, Control va
Template   tushunchalari   zamonaviy   dasturiy   ta'minot   ishlab   chiqishda   yuqori
darajadagi   qulaylik   va   moslashuvchanlikni   taqdim   etadi.   Bu   esa   dasturchilarga
yanada   interaktiv,   chiroyli   va   samarali   ilovalar   yaratishda   katta   imkoniyatlar
ochadi.   Xulosa   sifatida   aytish   mumkinki,   WPFning   ushbu   komponentlari   o‘zaro
uyg‘un   ishlashi   natijasida   dastur   yaratish   jarayoni   nafaqat   texnik   jihatdan
mustahkam,   balki   dizayn   va   foydalanuvchi   tajribasi   nuqtai   nazaridan   ham
mukammal bo‘lishiga xizmat qiladi.
27 FOYDALANILGAN ADABIYOTLAR
 FOYDALANILGAN KITOBLAR
1. MacDonald,   M.   (2010).   Pro   WPF   in   C#   2010:   Windows   Presentation
Foundation in .NET   4 .  Apress.
2. Anderson, C. (2007).  Programming WPF . Microsoft Press.
3. Albahari, J. (2017).  C#  7.0 in a Nutshell .  O'Reilly Media.
4. Nathan, A. (2013).  WPF 4.5 Unleashed . Sams Publishing.
5. Michaelis,   M.   (2006).   Essential   Windows   Presentation   Foundation   (WPF) .
Addison-Wesley.
6. Prosise, J. (2003).  Programming Windows with  C# .  Microsoft Press.
7. Adam   Nathan   muallifligidagi  “ WPF  4.5  Unleashed ”  kitobi ; 
8. A .  Troelsenning  “ Pro   WPF   in   C #”  asari ; 
9. WPF bo‘yicha onlayn darsliklar va video kurslar 4
; 
10. O‘zbekiston   Milliy   kutubxonasi   va   oliy   ta’lim   muassasalarining   o‘quv
adabiyotlari.
FOYDALANILGAN INTERNET MANBALARI
1. Microsoft.   (n.d.).   WPF   Application   Model .   Microsoft   Docs.
https    ://    learn    .   microsoft    .   com    /   en    -   us    /   dotnet    /   desktop    /   wpf    /   app    -   development    /   wpf    -  
application    -   model   
2. Microsoft.   (n.d.).   Control   Templating   Overview .   Microsoft   Docs.
https    ://    learn    .   microsoft    .   com    /   en    -   us    /   dotnet    /   desktop    /   wpf    /   controls    /   control    -  
templating    -   overview   
3. Metanit   sayti :  METANIT.COM - Сайт о программировании
4
  (Pluralsight, Udemy)
28 ILOVALAR
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;
using System.Windows.Controls;
namespace MyToDo
{
    public partial class MainWindow : Window
    {
        private const string fileName = "todo.json";
        private bool darkModeOn = false;
        public MainWindow()
        {
            InitializeComponent();
            Yuklash();
            YangilashStatistika();
        }
        private void BtnQoshish_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtVazifa.Text))
            {
                TaskItem task = new TaskItem
                {
                    Text = txtVazifa.Text,
                    IsDone = false,
29                     Deadline = dpDeadline.SelectedDate?.ToString("yyyy-MM-dd") ?? ""
                };
                PanelYaratish(task);
                txtVazifa.Clear();
                Saqlash();
                YangilashStatistika();
            }
        }
        private void PanelYaratish(TaskItem task)
        {
                        StackPanel   panel   =   new   StackPanel   {   Orientation   =
Orientation.Horizontal };
            CheckBox chk = new CheckBox
            {
                Content = task.Text,
                Margin = new Thickness(5),
                FontSize = 14,
                IsChecked = task.IsDone
            };
            chk.Checked += (s, e) => { Saqlash(); YangilashStatistika(); };
            chk.Unchecked += (s, e) => { Saqlash(); YangilashStatistika(); };
            TextBlock lblDeadline = new TextBlock
            {
                Text = task.Deadline,
                Margin = new Thickness(10, 0, 0, 0),
                VerticalAlignment = VerticalAlignment.Center,
                FontSize = 12
30             };
            if (DateTime.TryParse(task.Deadline, out DateTime deadlineDate))
            {
                if (deadlineDate.Date < DateTime.Today)
                    panel.Background = System.Windows.Media.Brushes.LightCoral;
                else if (deadlineDate.Date == DateTime.Today)
                    panel.Background = System.Windows.Media.Brushes.Khaki;
                else
                    panel.Background = System.Windows.Media.Brushes.LightGreen;
            }
            Button btnDelete = new Button
            {
                Content = " ??????️ ",
                Margin = new Thickness(5),
                Width = 30,
                Background = System.Windows.Media.Brushes.LightCoral
            };
            btnDelete.Click += (s, ev) =>
            {
                listVazifalar.Items.Remove(panel);
                Saqlash();
                YangilashStatistika();
            };
            panel.Children.Add(chk);
            panel.Children.Add(lblDeadline);
            panel.Children.Add(btnDelete);
31             listVazifalar.Items.Add(panel);
        }
        private void Saqlash()
        {
            List<TaskItem> tasks = new List<TaskItem>();
            foreach (StackPanel panel in listVazifalar.Items)
            {
                CheckBox chk = panel.Children[0] as CheckBox;
                TextBlock lbl = panel.Children[1] as TextBlock;
                tasks.Add(new TaskItem
                {
                    Text = chk.Content.ToString(),
                    IsDone = chk.IsChecked == true,
                    Deadline = lbl.Text
                });
            }
            string json = JsonConvert.SerializeObject(tasks, Formatting.Indented);
            File.WriteAllText(fileName, json);
        }
        private void Yuklash()
        {
            if (File.Exists(fileName))
            {
                string json = File.ReadAllText(fileName);
                var tasks = JsonConvert.DeserializeObject<List<TaskItem>>(json);
                foreach (var task in tasks)
32                 {
                    PanelYaratish(task);
                }
            }
        }
        private void YangilashStatistika()
        {
            int jami = listVazifalar.Items.Count;
            int bajarilgan = 0;
            foreach (StackPanel panel in listVazifalar.Items)
            {
                if (panel.Children[0] is CheckBox chk && chk.IsChecked == true)
                    bajarilgan++;
            }
            int bajarilmagan = jami - bajarilgan;
                        lblStatistika.Content   =   $" ??????   Vazifalar:   {jami}   |   ✅   Bajarilgan:
{bajarilgan} |  ❌  Qolgan: {bajarilmagan}";
        }
        private void BtnDarkMode_Click(object sender, RoutedEventArgs e)
        {
            if (!darkModeOn)
            {
                this.Background = System.Windows.Media.Brushes.Black;
                txtVazifa.Background = System.Windows.Media.Brushes.DimGray;
                txtVazifa.Foreground = System.Windows.Media.Brushes.White;
33                 listVazifalar.Background = System.Windows.Media.Brushes.DimGray;
                listVazifalar.Foreground = System.Windows.Media.Brushes.White;
                lblStatistika.Foreground = System.Windows.Media.Brushes.White;
                darkModeOn = true;
            }
            else
            {
                this.Background = System.Windows.Media.Brushes.White;
                txtVazifa.Background = System.Windows.Media.Brushes.White;
                txtVazifa.Foreground = System.Windows.Media.Brushes.Black;
                listVazifalar.Background = System.Windows.Media.Brushes.White;
                listVazifalar.Foreground = System.Windows.Media.Brushes.Black;
                lblStatistika.Foreground = System.Windows.Media.Brushes.DarkBlue;
                 darkModeOn = false;
            }
        }
    }
}
Xaml kodi:
<Window x:Class="MyToDo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MyToDo - Vazifalar ro'yxati" Height="440" Width="600"
        WindowStartupLocation="CenterScreen">
    <DockPanel Margin="10">
        <!-- Yuqori panel: Matn + Sana + Qo‘shish + Dark Mode -->
34                 <StackPanel   DockPanel.Dock="Top"   Orientation="Horizontal"
Margin="0,0,0,10">
             <TextBox x:Name="txtVazifa" Width="180" Height="30" FontSize="14"
Margin="0,0,10,0"/>
                        <DatePicker   x:Name="dpDeadline"   Width="120"   Margin="0,0,10,0"
SelectedDate="{x:Static sys:DateTime.Now}"/>
                        <Button   Content="Qo‘shish"   Width="80"   Click="BtnQoshish_Click"
Margin="0,0,10,0"/>
                        <Button   Content=" ??????   Dark   Mode"   Width="120"
Click="BtnDarkMode_Click"/>
        </StackPanel>
        <!-- Vazifalar ro‘yxati -->
        <ListBox x:Name="listVazifalar" Margin="0,0,0,10"/>
        <!-- Statistik ma'lumotlar -->
        <Label x:Name="lblStatistika"
               DockPanel.Dock="Bottom"
               FontSize="14"
               FontWeight="Bold"
               Foreground="DarkBlue"
               HorizontalContentAlignment="Center"/>
    </DockPanel>
</Window>
Application xaml kodi:
<Application x:Class="todo.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
35     <!-- Bu yerda endi resurs yo‘q -->
    <Application.Resources>
        <!-- Bo‘sh qoldiriladi yoki boshqa resurslar yoziladi -->
     </Application.Resources>
</Application>
Natijasi:
36 37

Algoritmik tillar va dasturlash   

Купить
  • Похожие документы

  • Konus kesimlari va ularning fokal xossalari
  • Algoritmik tillar va dasturlash
  • UWP(Win Ui) da grafika va multimedialar bilan ishlash
  • Axborot resurs markazi uchun avtomatlashtirilgan tizim kurs ishi
  • Talabalar bilimini baholovchi dastur yaratish

Подтвердить покупку

Да Нет

© Copyright 2019-2025. Created by Foreach.Soft

  • Инструкция по снятию с баланса
  • Контакты
  • Инструкция использования сайта
  • Инструкция загрузки документов
  • O'zbekcha