2009-03-11 7 views
5

Ich habe eine Anwendung, die Ligatabellen für Sportligen anzeigt. Diese Tabellen sind im Grunde Gitter mit verschiedenen Spalten, die Statistiken für jedes Team darstellen, wie gespielte Spiele, gewonnene, verlorene, erzielte und erzielte Tore. Als solche hat eine Ligatabelle eine interessante Eigenschaft: Für einen bestimmten Wettbewerb haben wir immer den gleichen Betrag von Reihen (die die Mannschaften darstellen). Da WPF-Steuerelemente aussehenlos sind, könnte ich wahrscheinlich eine ListBox, ein ListView, ein ItemsControl direkt oder sogar ein DataGrid verwenden. Sollte nicht so viel ausmachen.Ändern der Schriftgröße in der WPF-Liste oder im Gitter, um das Leerzeichen richtig zu verwenden

Allerdings möchte ich etwas, was ich noch nicht erreichen konnte: Angesichts der Tabellengröße (in der Praxis die Größe des Fensters) sollten ALLE Teams immer sichtbar sein (kein vertikales Scrollen), alle Statistikspalten (wie vom Benutzer ausgewählt) sollten sichtbar sein, und die Schriftgröße sollte dies so reflektieren, dass sie so groß wie möglich ist, ohne dass eine Spalte zu groß wird, damit der Inhalt passt.

Ich kann problemlos ein UniformGrid verwenden, um den no-vertical-Scroll-Teil zu erreichen. Die Anpassung der Schriftgröße scheint jedoch nicht ganz so einfach zu sein. Es gibt natürlich die ViewBox, die es erlauben würde, den Inhalt jeder Tabellenzelle individuell so groß wie möglich zu machen, aber dies würde möglicherweise zur Hässlichkeit führen, da Sie mit einer Reihe von Zellen mit variierenden Ergebnissen enden würden Größen.

Ich erwarte keine einfache Antwort darauf, aber wenn es überhaupt möglich ist, würde ich gerne davon hören. Zusammenfassend:

  1. Tabelle sollte die Größe des Fensters ändern und dabei immer alle Daten ohne Bildlaufleisten anzeigen.

  2. Die Schriftgröße sollte auf die größtmögliche Größe eingestellt werden, damit jede Spalte jeder Zeile ihren gesamten Inhalt anzeigen kann.

  3. Alle Spalten sollten auf die kleinstmögliche Größe skaliert werden, damit alle Inhalte sichtbar sind, mit Ausnahme einer Spalte, die "* -sizing" verwendet, um verbleibenden Platz zu verbrauchen.

Also .. Irgendwelche cleveren Möglichkeiten, dies zu tun? :)

Antwort

7

Würde es für das funktionieren, was Sie brauchen, das untergeordnete Element des Fensters eine ViewBox machen und den ganzen Inhalt darin setzen?Ich bin mir nicht sicher, ob die Details von dem, was Sie wird dies dazu führen, tun, nicht zu arbeiten, aber hier ist ein extrem einfaches Beispiel dafür, was ich vorschlage:

<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> 

Der gesamte Inhalt ist immer sichtbar, mit der maximal mögliche Schriftgröße. Der gesamte Text wird einheitlich skaliert.

+0

Richtig du bist! +1 Gehirnschaden für mich, ich dachte Viewboxen in den einzelnen Zellen, aber das ist natürlich total schwachsinnig. Ich muss nur die Stretch-Eigenschaften in den Griff bekommen und ich sollte nach Hause frei sein - danke! –

1

Sie können wahrscheinlich so etwas mit der Schriftgröße tun. Setzen Sie FontSize auf einen Bindungsausdruck, der mit einem benutzerdefinierten IValueConverter ({Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}} oder etwas ähnlichem) an die TextBox selbst bindet.

Innerhalb des Konverters haben Sie jetzt einen Verweis auf die TextBox, die Sie verwenden können, um den Textinhalt, die Größe des Steuerelements, die Größe eines übergeordneten Steuerelements (das Raster) usw. zu erhalten Verwenden Sie diese Informationen, um es im laufenden Betrieb zu berechnen.

Wenn Sie die TextBoxen benötigen, um diese Entscheidung aufeinander zu treffen, können Sie einen statischen Callback auf der von der Convert-Methode aufgerufenen Seite ausführen, um festzustellen, ob Sie sich noch im Größenänderungsmodus befinden Verfolgen Sie alle anderen Informationen (min oder max Schriftgröße bereits berechnet, usw.). Es ist ein komplizierter Prozess, aber es sollte ein paar Wege geben, wie Sie das tun können. Sie können den Text in allen Feldern zunächst sogar ausblenden, alle Textfelder durchlaufen, die diese Art der Entscheidung treffen (Mindestschriftgröße), dann die Schriftgröße programmgesteuert festlegen und sie in die Ansicht einblenden.

+0

Danke für Ihre Antwort - Ich denke, ich sehe, wie ich es so machen könnte, aber die Antwort von Daniel Pratt löste es ohne die zusätzliche Arbeit, also gab ich ihm die akzeptierte Antwort. Danke tho! –