2009-03-11 8 views
5

Mam aplikację wyświetlającą tabele ligowe lig sportowych. Tabele te są w zasadzie gridami z różnymi kolumnami reprezentującymi statystyki dla każdej drużyny, takimi jak mecze, wygrane, przegrane, zdobyte bramki i zdobyte itd. W związku z tym tabela ligowa ma jedną interesującą właściwość: dla danej konkurencji zawsze mamy tę samą kwotę wierszy (reprezentujących zespoły). Ponieważ kontrolki WPF są bez widoku, prawdopodobnie mógłbym użyć ListBox, ListView, bezpośrednio ItemsControl, a nawet DataGrid. Nie powinno to mieć większego znaczenia.Zmiana rozmiaru czcionki na liście WPF lub siatce w celu właściwego wykorzystania przestrzeni

Jednak chcę czegoś, czego jeszcze nie byłem w stanie osiągnąć: biorąc pod uwagę rozmiar stołu (w praktyce rozmiar okna), WSZYSTKIE zespoły powinny być widoczne przez cały czas (bez pionowego przewijania), wszystkie kolumny statystyk (wybrane przez użytkownika) powinny być widoczne, a rozmiar czcionki powinien odzwierciedlać to tak, aby był możliwie jak największy, a kolumna nie stała się zbyt duża dla dopasowania zawartości.

Mogę łatwo użyć jednolitego granulatu, aby osiągnąć część bez przewijania w pionie. Jednak dostosowanie rozmiaru czcionki nie wydaje się być tak łatwe.

Istnieje oczywiście ViewBox, który pozwalałby na to, aby zawartość każdej komórki tabeli była indywidualnie jak największa, ale to prawdopodobnie doprowadziłoby do brzydoty, ponieważ skończyłoby się na połączeniu wielu komórek o różnych rozmiarach. rozmiary.

Nie oczekuję łatwej odpowiedzi, ale jeśli jest to w ogóle możliwe, bardzo chciałbym o tym usłyszeć. Podsumowując:

  1. Tabela powinna zmieniać rozmiar za pomocą okna, zawsze wyświetlając wszystkie dane bez pasków przewijania.

  2. Wielkość czcionki należy ustawić na największy możliwy rozmiar, aby każda kolumna każdego wiersza mogła wyświetlić całą jej zawartość.

  3. Wszystkie kolumny powinny mieć rozmiar równy najmniejszemu możliwemu rozmiarowi, który pozwala na widoczność całej zawartości, z wyjątkiem jednej kolumny, która "sortuje", aby zjeść pozostałą część.

Więc ... Jakieś sprytne sposoby na zrobienie tego? :)

Odpowiedz

7

Czy to działa w tym celu, aby element podrzędny okna był ViewBoxem i umieścić w nim całą zawartość?Nie jestem pewien, czy szczegóły co robisz spowoduje to, aby nie pracować, ale tutaj jest bardzo prosty przykład tego, co mi sugeruje:

<Window x:Class="ZoomTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1"> 
    <Viewbox> 
     <StackPanel> 
      <TextBlock>2</TextBlock> 
      <TextBlock>Getting longer</TextBlock> 
      <TextBlock>Here is some really long text...</TextBlock> 
     </StackPanel> 
    </Viewbox> 
</Window> 

Cała zawartość jest zawsze widoczny, przy czym maksymalny możliwy rozmiar czcionki. Cały tekst skaluje się równomiernie.

+0

Dobrze, jesteś! +1 dla mojego mózgu, myślałem o widokach wewnątrz poszczególnych komórek, ale to jest oczywiście całkowicie niedorzeczne. Po prostu muszę opanować właściwości rozciągania i powinienem być w domu za darmo - dzięki! –

1

Prawdopodobnie możesz zrobić coś takiego z rozmiarem czcionki. Ustaw rozmiar czcionki na wyrażenie wiążące do samego TextBox z niestandardowym IValueConverter ({Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}} lub coś podobnego).

Wewnątrz konwertera znajduje się teraz odniesienie do ramki TextBox, za pomocą której można uzyskać zawartość tekstową, wielkość kontrolki, rozmiar formantu nadrzędnego (siatki) itp. Może być możliwe wykorzystaj te informacje, aby obliczyć je w locie.

Jeśli potrzebujesz pól TextBox do podejmowania decyzji na podstawie siebie nawzajem, możesz uzyskać statyczne wywołanie zwrotne na poziomie strony, z którego wywoływana jest metoda Konwertuj, która będzie determinować, jeśli nadal jesteś w trybie zmiany rozmiaru i śledź wszelkie inne informacje (min. lub max fontsize już obliczone, itp.). To skomplikowany proces, ale powinno być kilka sposobów na zrobienie tego. Możesz nawet ukryć tekst we wszystkich polach na początku, przeglądać wszystkie pola tekstowe podejmując taką decyzję (minimalny rozmiar czcionki), a następnie ustawić programowo rozmiar czcionki i zanikać je do widoku.

+0

Dziękuję za odpowiedź - Myślę, że widzę, jak mogłem to zrobić w ten sposób, ale odpowiedź Daniela Pratta rozwiązała go bez dodatkowej pracy, więc podałem mu zaakceptowaną odpowiedź. Dzięki, tho! –

Powiązane problemy