Коя контрола за таблица/мрежа в WPF?

Търся да показвам таблични данни (телевизионни канали), но с опции като DataGrid/UniformGrid/Table с FlowDocument/и др. Не мога да разбера кой би бил най-добрият вариант. Основният проблем е, че клетките не са еднакви по размер, тъй като той варира в зависимост от продължителността на времето, и бих искал да сложа подложка и между тях. Освен това трябва да мога да показвам само част от таблицата и да им позволя да превъртат нагоре/надолу/надясно, за да видят останалата част.

Коя би била най-добрата опция за управление на WPF за това? Ето малка илюстрация на това, към което отивам. Белият квадрат в горния ляв ъгъл е това, което бих искал да покажа в началото и да им позволя да превъртат до останалата част от него.

въведете описание на изображението тук


person Community    schedule 12.08.2012    source източник
comment
какво ще кажете за обвиващ панел, можете да добавите преглед на превъртане към него, създайте превъртане и докато подредите екрана си и имате същата височина, проблемът с ширината и разположението ще бъде решен от панела   -  person Clueless    schedule 15.08.2012


Отговори (1)


Има няколко начина да постигнете това, което се опитвате да направите тук. Ако производителността не е проблем, тогава бих игнорирал виртуализацията и бих опитал DockPanel Недостатъкът тук е, че ще трябва да добавяте елементите в ред, вместо да ги добавяте по ред.

Друга възможност е да използвате два панела за стек (по един във всяка посока). Това решава проблема с добавянето, но изисква използването на повече панели.

И двете предходни две опции ще изискват индивидуалните елементи да имат зададена височина/широчина.

Последната опция (в зависимост от това колко голяма е мрежата ви) би била да използвате мрежа с редове и колони с фиксиран размер с елементи, които обхващат редове (използвайки rowspan свойство). Недостатъкът на този метод е, че не знам за добър начин за създаване на този контрол в xaml за неопределен брой редове/колони, така че ще трябва да го създадете в код, за да получите необходимия брой редове/колони.

Ако имате проблеми с производителността, можете да опитате да използвате VirtualizingStackPanel. Ако това все още не отговаря на вашите изисквания за производителност, тогава ще трябва да подкласирате VirtualizingPanel и го пригодете да отговаря на вашите специфични нужди.

Вижте тук за повече информация относно производителността на панела.

Предлагам първо да опитате двата метода StackPanel, след това метода VirtualizingStackPanel и накрая, ако това не работи, опитайте VirtualizingPanel

Подпълването се постига лесно чрез задаване на свойството Margin на всяка подконтрола.

За превъртане използвайте ScrollViewer

person N_A    schedule 14.08.2012
comment
Мисля, че StackPanels ще бъде най-добрият подход - person Shaun Bowe; 15.08.2012
comment
Благодаря ви много за чудесния отговор. Ще продължа и ще приема това и ще присъдя награда. Ще използвам Stack Panels с Scroll Viewer, но най-добре ли е да имам 1 вертикален стек панел с имената на каналите от лявата страна и хоризонтален стек панел отстрани на всеки за EPG данни или просто блок от хоризонтални стекови панели, по 1 за всеки канал, и вместо това да включи името/иконата на канала в това? - person ; 15.08.2012
comment
@BrettPowell Вероятно щях да имам контрол на елементи със стеков панел като панел на елементи (който е по подразбиране) за вертикала и след това шаблон с контрола за канала до хоризонтален стеков панел за предаванията. Това трябва да опрости оформлението и подвързването. - person N_A; 15.08.2012
comment
Мисля, че могат да се направят някои предположения. Всяка клетка ще представлява 30 минути (или може би 15, тъй като някои програми могат да бъдат кратки, но това е по-скоро краен случай). Така че ширината на клетките може да се приеме въз основа на наличните данни (дължината на програмата). Лично това ме кара да клоня към подредени стекови панели, защото има логичен смисъл. - person Shmiddty; 21.08.2012