Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Scrollviewer - funktioniert nicht im ItemsControl
Talbot21
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Scrollviewer - funktioniert nicht im ItemsControl

beantworten | zitieren | melden

Hallo zusammen,

heute habe ich ein GUI-Problem, welches ich mir nicht so recht erklären kann:


        <ItemsControl Grid.Row="1" ItemsSource="{Binding ...}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="{Binding ...}" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.Template>
                <ControlTemplate TargetType="ItemsControl">
                    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                        <ItemsPresenter/>
                    </ScrollViewer>
                </ControlTemplate>
            </ItemsControl.Template>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Image Grid.Row="0" ...>
                            <Image.ToolTip>
                                <ToolTip ... />
                            </Image.ToolTip>
                        </Image>
                        <TextBlock Grid.Row="1" ...  />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>


Ich versuche, ein ItemsControl zu erstellen, welches mir ein paar Bilder mit einem Bezeichner darunter entweder horizontal oder vertikal (je nach Binding) auflistet. Das funktioniert soweit auch, aber ich möchte eine horizontale / vertikale Scrollbar haben, wenn die Items über den sichtbaren Platz hinaus gehen. Das gelingt mir aber nicht, die Scrollbars sind immer unsichtbar. Wenn ich im ScrollViewer statt Auto den Wert Visible angebe, sind die Scrollbars zwar da, allerdings ausgegraut (obwohl die Items aus dem sichtbaren Bereich rausragen). Für einen Tipp, was ich hier falsch mache, wäre ich sehr dankbar, da ich da gestern den halben Tag mit allen möglichen Versuchen drauf gehauen hab.

Ich hab auch schon versucht, den ScrollViewer um das ItemsControl herum zu packen (statt im ItemsControl.Template) aber das hat genau denselben Effekt.
Danke
private Nachricht | Beiträge des Benutzers
Urza
myCSharp.de - Member



Dabei seit:
Beiträge: 68

beantworten | zitieren | melden

Ich denke du musst bei der RowDefinition ein Height="*" eingeben und gegebenenfalls noch eine ColumnDefinition mit Width="*" hinzufügen.
Auto = nimm soviel Platz wie du brauchst => ragt auch über den sichtbaren Bereich hinaus und es wird kein Scrollbalken benötigt
* = nimm soviel Platz wie verfügbar ist => ragt nicht über den sichtbaren Bereich hinaus und es erscheint ein Scrollbalken
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

- Patrick to Spongebob
private Nachricht | Beiträge des Benutzers
Talbot21
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Hallo Urza,

habe es gerade mit * statt Auto getestet, macht aber leider keinen Unterschied.
Das ItemsControl selbst liegt auch in einem Grid und die Row / Column steht da auch bereits auf *
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 244
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Versuche mal bitte Urzas Vorschlag plus den Scrollviewer um das gesamte ItemsControl zu legen.
Ggf müsste dieser vielleicht sogar noch weitere Ebenen im XAML nach oben.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spook am .
private Nachricht | Beiträge des Benutzers
Talbot21
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Es gibt nur noch eine Ebene darüber, das Grid, in dem das ItemsControl liegt, ist das oberste Grid.
Ich habs jetzt mit * versucht und den ScrollViewer um das ItemsControl herum gelegt => kein Unterschied
Dann hab ich den ScrollViewer noch verschoben und um das äußere Grid gelegt => kein Unterschied

:-(
private Nachricht | Beiträge des Benutzers
Talbot21
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Zwar spät, aber vielleicht doch interessant: Das Ganze hat eigentlich schon von Anfang an funktioniert. Wenn ich mein Control auf ein leeres Fenster packe, tut Alles wie es soll, aber im konkreten Anwendungsfall funktionierte es nicht. Nach Einiger Recherche kam raus, dass der "Benutzer" des Controls, das Control in ein Stackpanel geklatscht hat, wodurch es dann den beschriebenen Fehlereffekt gibt.

Wäre trotzdem interessant zu wissen, ob ich als Control-Entwickler irgendwas tun kann, um das zu verhindern. Das Control sollte ja überall gleich funktionieren, unabhängig davon, wo der Nutzer es in seinem Layout verwendet, oder?
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.763
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat von Talbot21
Wäre trotzdem interessant zu wissen, ob ich als Control-Entwickler irgendwas tun kann, um das zu verhindern.

Nein.

Das StackPanel bietet dem Inhalt unbegrenzt viel Platz und der ScrollViewer füllt den Platz aus, den es hat.
Ergo: Der ScrollViewer kann unendlich groß werden, was die Scroll-Funktion überflüssig macht.

Besser wäre ein Grid oder ein DockPanel oder der ScrollViewer bekommt feste Maße.
private Nachricht | Beiträge des Benutzers