Diskuze: WPF tabulka
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Jinak pro doplnění, používám komponentu Grid (možna by se na to hodila jiná) Ale potřebuju pak do buněk dávat ruzné veci jako button atd. Respektive to bude takovej kalenrář ukolů zamestnanců, který se bude tahat z databáze.
zkus nakreslit co chces. nejak sem to nepochopil z textu.
Hele, podle mě na to jdeš zbytečně složitě. Udělej si normální
DataGrid a nastav mu, že každá buňka tabulky bude obsahovat vlastní Grid.
Tohle samo o sobě ti nabízí ohromné možnosti, protože do tohoto Gridu v
tabulce pak můžeš generovar úplně cokoliv.. například ty tlačítka a
přitom ti zůstaně úplně stejný uživatelský přístup (co se manipulace s
tabulkou týče).
Ahoj, pokud bude těch věci na vykreslení víc a pro různé buňky budeš
potřebovat úplně jiné styly, řešil bych to vlastním userControlem.
Pro každý styl si uděláš vlastní user control ve WPF (nebudeš muset
všechno vytvářet dynamicky za běhu) a pak do dané buňky gridu jen
plácneš userControl který se ti tam zrovan hodí Navíc do toho userControlu
můžeš přenés část logiky (stisky tlačítek atd.) takže to pak nemusíš
mít všechno v jednom souboru.
Abych to lépe popsal tak jsem to namaloval.
Tabulka se vytvaři z nejaké databaze kde taham čas a jak dlouho bude ukol
trvat.
Ta se musí dělat dynamicky, v akždém políčku bude nahoře butonek (to jsou
ty malé čtverečky černé) kde bude dalsi funkčnost (nějké přidavani
ukolu atd...)Z databáze se bude urcovat barva podle tooh jaký je to ukol. Jde
mi o to že ta jedna hodina je rodělená po 1řti minutach a chcu aby šla
videt dycky jenom border té jedné hodiny. Proste tak jak to mám já. Dále
aby samozřejme to bylo dynamické tedy když budou v kolizi nejaké ukoly tak
se to dá na další řadek jak jsem demonstroval u pepu.
V tom případě děláš ale harmonogram a né tabulku jak jsi říkal. Hele a co takhle si tam hodit
GridSplitery? Uživatel by měl pak možnost si jednotlivé buňky zvětšovat a
zmenšovat podle libosti a přitom by ti to pěkně fungovalo na oddělení.
Kdysi jsem dělal na jednom
velkém projekty, šlo o řízení výroby pomocí Ganttových diagramů, což
je ještě složitější než tvůj harmonogram. Tehdy jsem to řešil tak, že
jsem si celou pracovní plochu vykresloval do Canvasu, to mě dovolilo
vytvářet doslova cokoliv mě napadlo na ploše. Což by v tvém případě
klidně mohlo být, že by sis vykreslil třeba Rectangly a nastavil jim
událost na kliknutí - což by ti nahradilo tlačítka.
Na jakej koliv obrázek co namaluju jde nastavit nejaká udalost?..Třeba
mouseOver, Click, Double click, DragAndDrop,...atd..? Jeslti ano tak to tak
možná udělám
Samozřejmě, že jde
např:
Rectangle newRectangle = new Rectangle();
newRectangle.MouseLeftButtonDown += new MouseButtonEventHandler(newRectangle_MouseLeftButtonDown);
private void newRectangle_MouseLeftButtonDown(object sender, MouseEventArgs e)
{ }
Události si můžeš vytvářet na cokoliv tě napadne. Už jen tím, že
napíšeš např zmíněný newRectangle. , tak ti našeptávaš ukazuje vše co
je možné nastavit, včetně událostí.
Jasně jasně děkuju, a jeste jednu otazku prosímte, Zkouším vytvařet ty
rectangly ale nejde mi nijak nastavit border nalevo atd. Viš jakože bych
napsal mujRect.Border(1,1,5,0); s tím že ten posledni by proste nebyl
videt.
Děkuju
Normálně se dá rámeček pro Rectangle nastavit přes vlastnost .Stroke, ten má ovšem jen jednu nastavitelnou velikost tloušťky a vede kolem celého rectanglu. Pokud chceš vykreslit něco tak specifického, jako je nesymetrický rámeček, tak musíš vykreslit v podstatě dva objekty: Rectangle a Border zvlášť. Např:
Border newBorder = new Border();
newBorder.BorderThickness = new Thickness(1, 1, 5, 0);
newBorder.BorderBrush = Brushes.Black;
newBorder.Width = 200;
newBorder.Height = 40;
Rectangle newRectangle = new Rectangle();
newRectangle.Width = 200;
newRectangle.Height = 40;
newRectangle.Fill = Brushes.Red;
//newRectangle.Stroke = Brushes.Black;
mujCanvas.Children.Add(newRectangle);
mujCanvas.Children.Add(newBorder);
Samozřejmě na konci musíš prvně vykreslit rectangle a pak rámeček,
protože ten ho překreslí.
Zobrazeno 11 zpráv z 11.