IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
turkm
Člen
Avatar
turkm:1.12.2014 11:18

Ahojte.

Chcel by som vas poprosit o radu, aky komponent pouzit v XAMLe, pre naprogramovanie casovej osy, ktora bude rozdelena na hodiny.

Pre upresnenie, ide o lekarske procedury, kde zakaznik potrebuje vidiet v jednom riadku den a v nom procedury (objekt) zobrazene ako rectangle alebo canvas.

Dakujem za rady

 
Odpovědět
1.12.2014 11:18
Avatar
Odpovídá na turkm
Andrej Farkaš:1.12.2014 13:09

Našiel som nejaké ukážky, ale neskúšal som a netuším či ti to bude vyhovovať, ale možno jo.
http://stevenhollidge.blogspot.sk/…control.html
http://help.infragistics.com/…imeline.html
http://www.infragistics.com/…t/51654.aspx

Nahoru Odpovědět
1.12.2014 13:09
Live. Love. Learn.
Avatar
turkm
Člen
Avatar
turkm:1.12.2014 13:42

Tie ukazky su fajn :) dakujem. Problem je v tom ze prva ukazka vyuziva platene controly firmy Telerik a tie druhe ukazky su Infragis... opat platene. Ale na taky sposob by to mohlo byt.

 
Nahoru Odpovědět
1.12.2014 13:42
Avatar
Odpovídá na turkm
Andrej Farkaš:1.12.2014 13:55

Tak googlime ďalej ;-)
http://timeline.codeplex.com/ (BSD License)
http://www.codeproject.com/…ntrol-Part-I (MIT License)
PS: Použi tlačidlo Odpovědět, nech mi príde upozornenie.

Editováno 1.12.2014 13:56
Nahoru Odpovědět
1.12.2014 13:55
Live. Love. Learn.
Avatar
Honza
Člen
Avatar
Honza:1.12.2014 15:03

Ahoj, časovou osu jsem v XAMLu řešil nedávno. Použil jsem úplně obyčejný grid s pevným počtem sloupců (v mém případě jsem potřeboval 5 minutové intervaly). Řádky přidávám dynamicky v code behind po načtení dat z databáze.
V mém případě se jedná o směny lidí, co řádek to jeden člověk, časová osa je na ose x.

Nahoru Odpovědět
1.12.2014 15:03
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
turkm
Člen
Avatar
Odpovídá na Andrej Farkaš
turkm:2.12.2014 10:56

Dakujem za typy, vyskusam. Tu druhu moznost som este neskusal... tak popozeram... ta prva (http://timeline.codeplex.com/) mi nefungovala spravne...

 
Nahoru Odpovědět
2.12.2014 10:56
Avatar
turkm
Člen
Avatar
Odpovídá na Honza
turkm:2.12.2014 11:01

Pouzil si obycajnu datagrid alebo listview si upravil view na gridview?

Akym sposobom si prosim ta riesil objekt, ktorym si zobrazil udalost?
Plnil si si len column head casom alebo si skryval casy aj v celloch?
Podarilo sa ti spravit aj drag and drop alebo ine vychytavky?

Dakujem za odpovede :)

 
Nahoru Odpovědět
2.12.2014 11:01
Avatar
Honza
Člen
Avatar
Honza:2.12.2014 14:16

Ahoj, použil jsem obyčejný grid, ale dalo by se říct že jsem ten problém rozdělil do 3 částí (komponent) napsaných v xamlu + code behind:

  1. Vytvořil jsem si komponentu která reprezentuje hlavičku. Jsou na ní nápisy časové osy, tlačítka pro přepínání dnů atd.
  2. Další komponentou je samotný "item" který reprezentuje danou směnu. V něm je napsaná i logika v code behind co se má stát když na to najedeš myší, když vyvoláš kontextovou nabídku atd.
  3. Poslední komponentou je panel, na který přidávám 2 předchozí komponenty. Tzn. na něm mám grid s předem daným počtem sloupců (podle toho jaký potřebuješ časový interval). Do prvního řádku dám hlavičku a do dalších dynamicky přidávám jednotlivé itemy reprezentující směnu. Co řádek, to jedna směna. Zobrazení délky směny řídím tak, že mám napsanou funkci, která mi počítá column span podle požadovaného času (vím že jeden sloupec reprezentuje 5 minut a první sloupec je čas 00:00 - 00:05, takže když chci nastavit směnu 1:00 až 2:00 tak vím že item musím umístit do sloupce číslo 11 a column span musí být 12) :)

Jinak funguje tam drag and drop a kontextové menu (jak na jednotlivých směnách tak i na panelu jako takovém). Můžeš buď přesouvat celou směnu a nebo měnit její délku buď pomocí drag and drop a nebo pomocí formuláře který jde vyvolat. Drag and drop není nic jiného že odchytáváš eventy myši (konkrétně používám eventy MouseMove, MouseLeave, MouseLeftButton­Down, MouseLeftButtonUp). Zapamatuješ si kde byla myš před přesunutím, pak podle polohy myši zjistíš aktuální polohu (nad kterým sloupcem jsi), a podle směru spočítáš novou délku nebo čas směny (změníš column index a column span itemu) :) Nejvíc práce dá odladit, aby to šlapalo hladce a bez záškubů, ale výsledek stojí za to ;)

Přikládám print screen abys viděl jak to vypadá (oranžová barva znamená že na směne jsou neuložené změny a ta nevzhledná šipka značí, že směna zasahuje do jiného dne) :) Jinak ve WPF teprve začínám pracovat, takže vím že spoustu věcí řeším špatně. V code behind mám asi mnohem víc věcí než by bylo potřeba. Dalo by se říct že XAML používám jen na vytvoření vzhledu a vše ostatní píšu v C# což asi není principialně úplně dobře :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
2.12.2014 14:16
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
turkm
Člen
Avatar
Odpovídá na Honza
turkm:3.12.2014 7:53

Dakujem za inspiraciu. Mas to velmi pekne :) mozem si ta pridat do priatelov a v pripade, ze si nebudem vediet rady ta poziadat o pomoc? :) Dakujem

 
Nahoru Odpovědět
3.12.2014 7:53
Avatar
Honza
Člen
Avatar
Odpovídá na turkm
Honza:3.12.2014 9:43

Není za co. Jasně, není problém :)

Nahoru Odpovědět
3.12.2014 9:43
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
turkm
Člen
Avatar
Odpovídá na Honza
turkm:5.12.2014 14:52

Mohol by si mi prosim ta popripade na teba poslat skype? Dakujem :)

 
Nahoru Odpovědět
5.12.2014 14:52
Avatar
Honza
Člen
Avatar
Honza:7.12.2014 22:12

Bohužel Skype ani jiný komunikátor nepoužívám :)

Nahoru Odpovědět
7.12.2014 22:12
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
turkm
Člen
Avatar
Odpovídá na Honza
turkm:8.12.2014 12:14

Aha, navadi :) Ten style pre uz samotne smeny si upravoval cez CellTemplate? Tie komponenty, ktore si vytvoril, si robil cez usercontrol alebo aky si zvolil postup? Dakujem za odpovede :)

 
Nahoru Odpovědět
8.12.2014 12:14
Avatar
Honza
Člen
Avatar
Odpovídá na turkm
Honza:8.12.2014 14:34

Použil jsem resource dictionary a v něm jsem vytvořil styl pro danou komponentu.
Následně jsem v App.xaml přidal reference na daný resource dictionary. Stačí tam přidat něco jako toto:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ControlsTemplates\StyleButton1.xaml" />
            <ResourceDictionary Source="ControlsTemplates\StyleScrollBar.xaml" />
            <ResourceDictionary Source="ControlsTemplates\StyleStatusBar.xaml" />
            <ResourceDictionary Source="ControlsTemplates\StyleStatusBarItem.xaml" />
            <ResourceDictionary Source="ControlsTemplates\StyleExpanders.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

jsou to jen odkazy na soubory šablon které si vytvoříš. ControlsTemplates je adresář do kterého si šablony házím, aby v tom nebyl takový chaos.

A použítí v kódu je jednoduché, nastavíš jen styl dané komponentě:

<button Style="{StaticResource nazevTvojiSablony}" />
Nahoru Odpovědět
8.12.2014 14:34
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
turkm
Člen
Avatar
Odpovídá na Honza
turkm:10.12.2014 7:46

To ano, tomuto rozumiem. Len to skusam a upravujem CellTemplate, ktoremu priradim DataTemplate a neviem ze ci to robim spravne, lebo vobec mi nefunguje ColSpan ani RowSpan :/

 
Nahoru Odpovědět
10.12.2014 7:46
Avatar
turkm
Člen
Avatar
turkm:17.7.2015 8:40

Ja len posielam moj aktualny vysledok :)

 
Nahoru Odpovědět
17.7.2015 8:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.