/// <summary> /// Metoda pro vytvoření interní kolekce obsahující pouze položky vykreslované na konkrétní stránku. /// </summary> private void VyberPolozkyNaStranku() { // Určení indexu položky pro výběr na základě počtu již vykreslených stran int StartIndex = CisloStranky * MaxPolozekNaStranku; // Smazání kolekce pro možnost přidání nových dat PolozkyNaJedneStrance.Clear(); // Pokud v kolekci je více položek než se vejde na 1 stránku, vybere se pouze maximální počet na stránku if ((StartIndex + MaxPolozekNaStranku) <= SeznamPolozek.Count) { // Postupné přidání určitého počtu položek do kolkece pro vykreslení 1 strany for (int index = StartIndex; index < (StartIndex + MaxPolozekNaStranku); index++) { PolozkyNaJedneStrance.Add(SeznamPolozek[index]); } } // Pokud v kolekci zbýva jen několik položek pro vykreslení, vybere se daný počet na poslední stránku else { // Postupné přidání určitého počtu položek do kolkece pro vykreslení 1 strany for (int index = StartIndex; index < SeznamPolozek.Count; index++) { PolozkyNaJedneStrance.Add(SeznamPolozek[index]); } } }
/// <summary> /// Vytvoření grafické reprezentace položek na 1 stránce a seskupení těchto položek do interní kolekce. /// </summary> private void VytvorGrafickouStrankuPolozek() { // Smazání obsahu stránky za účelem vykreslení nových dat this.StrankaPolozek.Children.Clear(); // Vytvoření StackPanel pro seskupení grafických prvků na 1 stránce StackPanel Stranka = new StackPanel { Orientation = Orientation.Vertical }; // Postupné vytvoření grafické reprezentace položky a přidání do kolkece grafických položek foreach (Polozka polozka in PolozkyNaJedneStrance) { // Vytvoření bloku reprezentující 1 položku na stránce StackPanel GrafPolozka = new StackPanel { Orientation = Orientation.Vertical, Background = Controller.BarvaPozadi }; // Název položky Label nazev = new Label { Content = polozka.Nazev + ":", FontSize = 17 }; // Hodnota položky Label cena = new Label { Content = polozka.Cena.ToString() + " Kč", FontSize = 18 }; // Oddělovací čára Rectangle deliciCara = new Rectangle { Width = 200, Height = 2, Fill = Brushes.DarkBlue }; // Přidání prvků do bloku položky GrafPolozka.Children.Add(nazev); GrafPolozka.Children.Add(cena); GrafPolozka.Children.Add(deliciCara); // Uložení indexu položky v seznamu pro následnou identifikaci konrétní položky GrafPolozka.Name = "obr" + PolozkyNaJedneStrance.IndexOf(polozka).ToString(); // Přidání událostí pro grafický blok určený pro vykreslení stránky položek GrafPolozka.MouseDown += GrafPolozka_MouseDown; GrafPolozka.MouseMove += GrafPolozka_MouseMove; GrafPolozka.MouseLeave += GrafPolozka_MouseLeave; // Přidání bloku na stránku Stranka.Children.Add(GrafPolozka); } /* Doplnění stránky prázdnými bloky pro zajištění stálé velikosti stránky z důvodu pohodlnějšího ovládání kolečkem myši */ // Počet prázdných bloků potřebných pro doplnění stránky int PocetPrazdnychBloku = MaxPolozekNaStranku - PolozkyNaJedneStrance.Count; // Pomocná proměnná pro uchování výšky vytvořeného bloku int VyskaPrazdnehoBloku = (int)Math.Floor(360.0 / MaxPolozekNaStranku); // Přidání určitého počtu prázdných bloků pro dpolnění stránky na celkovou velikost for (int i = 0; i < PocetPrazdnychBloku; i++) { StackPanel prazdnyBlok = new StackPanel { Background = Controller.BarvaPozadi, Height = VyskaPrazdnehoBloku, Width = 200 }; Stranka.Children.Add(prazdnyBlok); } // Vytvoření popisku pro označení aktuální stránky Label OznaceniStranky = new Label { FontSize = 12, Content = "Strana " + (CisloStranky + 1).ToString() + " z " + MaximalniPocetStran.ToString(), Foreground = Brushes.Red }; // Přidání popisu do bloku stránky Stranka.Children.Add(OznaceniStranky); // Uložení indexu stránky pro identifikaci dat a orientaci v celkovém seznamu Stranka.Name = "str" + CisloStranky.ToString(); // Přidání události pro stránku graficky vykreslených dat Stranka.MouseWheel += Stranka_MouseWheel; // Uložení grafické reprezentace stránky do interní proměnné this.StrankaPolozek.Children.Add(Stranka); }