2012-08-12 11 views
7

Szukam wyświetlić dane tabelaryczne (kanały telewizyjne), ale z opcjami takimi jak DataGrid/UniformGrid/Table with FlowDocument/etc. Nie wiem, jaka byłaby najlepsza opcja. Głównymi problemami jest to, że komórki nie mają jednolitego rozmiaru, ponieważ zmienia się on w zależności od długości czasu i chciałbym również umieścić między nimi dopełnienie. Dodatkowo, muszę tylko być w stanie wyświetlić część tabeli i pozwolić im przewijać w górę/w dół/w prawo, aby zobaczyć resztę.Która tabela/kontrola siatki w WPF?

Jaka byłaby najlepsza opcja kontroli WPF? Oto mała ilustracja tego, co zamierzam. Biały kwadrat w lewym górnym rogu jest tym, co chciałbym wyświetlić na początku i pozwolić im przewinąć do reszty.

enter image description here

+0

co panel oblewania można dodać widza przewijania, aby go utworzyć przewijanie, i tak długo, jak można umieścić swój ekran w porządku i mają taką samą wysokość i szerokość rozmieszczania problemu byłby rozwiązany przez panel – Clueless

Odpowiedz

3

Istnieje kilka sposobów, aby osiągnąć to, co starasz się zrobić tutaj. Jeśli wydajność nie jest problemem, zignorowałbym wirtualizację i wypróbowanie wersji DockPanel. Wadą jest to, że trzeba dodać elementy w kolejności zamiast dodawać je po wierszu.

Inną opcją jest użycie dwóch paneli kominowych (po jednym w każdym kierunku). Rozwiązuje to problem z dodawaniem, ale wymaga użycia większej liczby paneli.

Obie poprzednie dwie opcje wymagałyby, aby poszczególne pozycje miały ustawiony ich wysokość/szerokość.

Ostatnią opcją (w zależności od tego, jak duża jest twoja siatka), byłoby użycie siatki o stałych rozmiarach i kolumnach z pozycjami obejmującymi rzędy (przy użyciu właściwości rowspan). Wadą tej metody jest to, że nie znam żadnego dobrego sposobu na stworzenie tej kontroli w xaml dla nieokreślonej liczby wierszy/kolumn, więc musiałbyś utworzyć ją w kodzie, aby uzyskać wymaganą liczbę wierszy/kolumn.

Jeśli masz problemy z wydajnością, spróbuj użyć funkcji VirtualizingStackPanel. Jeśli to nadal nie spełnia twoich wymagań dotyczących wydajności, musisz podklasować VirtualizingPanel i dostosować ją do swoich potrzeb.

Aby uzyskać więcej informacji na temat wydajności panelu, zobacz numer here.

Proponuję najpierw spróbować dwa StackPanel metodę, a następnie metodą VirtualizingStackPanel i wreszcie, jeśli to nie zadziała, to spróbuj VirtualizingPanel

Dopełnienie jest łatwo osiągnąć poprzez ustawienie właściwości Margin na każdym subcontrol.

do przewijania Użyj ScrollViewer

+0

Myślę, że StackPanels byłby najlepszym podejściem –

+0

Dziękuję bardzo za wspaniałą odpowiedź. Pójdę do przodu i zaakceptuję to i nagrodzę nagrodę. Mam zamiar użyć paneli Stack w/Scroll Viewer, ale czy najlepiej byłoby mieć 1 pionowy panel stosów z nazwami kanałów po lewej stronie i poziomy panel stosów po bokach dla danych EPG lub po prostu blok poziomych paneli stosów, po 1 dla każdego kanału i zamiast tego zawiera nazwę/ikonę kanału? –

+0

@BrettPowell Prawdopodobnie miałbym control przedmiotów z panelem Stackpanel jako itemspanel (który jest domyślny) dla pionu, a następnie szablon z kontrolą dla kanału obok poziomego panelu stacków dla pokazów. To powinno uprościć układ i wiązanie. – mydogisbox

Powiązane problemy