Laden...

[ungelöst erledigt] Programmatisch Grid in ItemTemplatePanel finden?

Erstellt von 7.e.Q vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.232 Views
7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 13 Jahren
[ungelöst erledigt] Programmatisch Grid in ItemTemplatePanel finden?

Hi Leute,

ich versuche gerade, in einem Custom Control, das von ItemsControl abgeleitet ist, das ItemsPanel zu finden, weil ich's programmatisch verändern will (ca. 250 ColumnDefinitions im XAML gehen mir ein wenig zu sehr gegen Don't Repeat Yourself).

Wie bekomme ich im Programm also Zugriff auf das Grid, das da im ItemsPanel steckt?


        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <Grid x:Name="PART_ItemsTemplateGrid" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>

Geht das überhaupt?

Danke!

Grüße,
Hendrik

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 13 Jahren

Ich weiß nicht, ob's auch mit UniformGrid funktioniert hätte... Jedenfalls hab ich's jetzt über ein von Grid abgeleitetes Control realisiert, das eine Eigenschaft Columns bekommen hat und die Anzahl uniformer ColumnDefinitions danach erzeugt. Ist akzeptabel. 👍

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

dein Gedanke zu DRY ist sicherlich korrekt, trotzdem wäre ein ItemsControl welches besondere Anforderungen an das ItemsPanel hat (bei dir Grid) und dann noch Eigenschaften dieses setzt, kein valides WPF Control, da es nichtmehr allgemeingültig nutzbar ist und im Prinzip die Logik des Controls ein bestimmtes Aussehen erzwingt. Und das macht kein einziges WPF Control. Die bieten immer nur die Logik und ein Standardaussehen, aber niemals bestimmt die Logik das aussehen.

Der zweite Ansatz ist besser. Das Uniform Grid wäre verwendbar wenn Höhe und Breite gleich wären, aber ansonsten ist die Ableitung vom Grid eine Möglichkeit. Dieses Grid könntest du dann auch z.B. als ItemsPanel benutzen. Wobei du dann immer noch das Problem hast die Children des Panels den richtigen Columns zuzuordnen. Da müsste das eigene Grid ja auch einfach die vorhandenen Columns auffüllen.

Trotzdem wäre ich nicht ganz zufrieden. Grid ist nen ziemlich mächtiges Control und 250 Spalten sind viel. Wenn die Children nicht gerade einfach ausfallen dann ist der Layoutprozess extrem aufwendig und das ganze könnt recht lahm werden wenn mans nicht richtig anstellt.

Was willst du denn eigentlich anzeigen? 250 Spalten mit wirklichem Nutzinhalt sind für den User auch ne Qual. Das überblickt man nicht leicht.

Baka wa shinanakya naoranai.

Mein XING Profil.

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 13 Jahren

In Ermangelung eines erschwinglichen oder gar freien Schedule-Controls baue ich mir so ein Teil gerade selber. Geht um die visuelle Darstellung von Stunden-/Vorlesungsplänen. Die Startzeit eines Eintrags wird in Column umgerechnet, die Dauer in ColumnSpan.

Ich hatte schon einmal solch ein Control gebaut, in dem ich ein Canvas als Panel verwendet habe. Aus irgendeinem Grunde missfiel mir diese Lösung allerdings. Da ich jedoch nicht genug geschlafen habe, letzte Nacht, fällt mir dieser Grund gerade leider nicht ein.

Andererseits, Canvas wäre wahrscheinlich performanter... Na mal sehen...