Mam pytanie dotyczące układania z widokiem listy wewnątrz przewijania. Gdy widok listy znajduje się w przewijarce, używa on jej maksymalnego rozmiaru i nie przewija się samoczynnie, ponieważ przewijarka oferuje nieograniczoną ilość miejsca na kontrolki wewnątrz niego. Problem polega na tym, że elementy sterujące znajdujące się poniżej długiej listy są widoczne tylko wtedy, gdy użytkownik przewinie ekran w dół i chcę, aby widok listy był używany tylko w niezbędnym miejscu i użyj samego paska przewijania. Zdjęcia mówią więcej informacji niż słów (linki do zdjęć również mówią dużo, bo moja reputacja nie ma jeszcze 10 lat. Edit2: cóż, mogę użyć tylko jednego linka, więc skopiowałem wszystkie zdjęcia na jeden). nie Jeżeli wykazy dawno wszystko jest w porządku:WPF: ListView wewnątrz Scrollviewer; Pytanie układowe
Zdjęcie 1:
Teraz, gdy lista jest dłuższa kontrole poniżej ruch w dół do ziemi niewidzialnej:
rysunek 2: patrz link z zdjęcie 1
Co chcę się zdarzyć teraz to:
zdjęcie 3: patrz link z obrazka 1
To samo w sobie nie jest problemem, ponieważ możemy umieścić wszystko w dockpanalu i dokować kontrolki poniżej do Dock. Odsłoń i od góry do góry, a widok listy wypełnij środkiem "lastchildfill". Teraz prawdziwy problem. Co się stanie, jeśli okno się zmniejszy? Na początku widok listy znika, a następnie wszystko inne bez paska przewijania, aby przewinąć do elementów sterujących na dole.
Zdjęcie 4: patrz link z obrazka 1
Idealny rozwiązanie szukam ma mieć przewijania na okna (albo ScrollViewer root), które pozwoliłyby nam, aby przejść do każdej części okna w ten sposób i po prostu mieć zewnętrzne paski przewijania, aby były widoczne, gdy wszystko ma minimalny rozmiar.
Zdjęcie 5: patrz link z obrazka 1
jakieś pomysły? zbyt wiele zdjęć? tutaj jest trochę XAML dla wszystkich, aby spróbować co działa (to tylko szybki przykładowe okna ...)
<Window x:Class="WpfTest1.ScrollTestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="ScrollTestWindow" Height="400" Width="700">
<ScrollViewer >
<DockPanel LastChildFill="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
<Grid DockPanel.Dock="Top">
<TextBlock Text="Example controls above listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<Grid DockPanel.Dock="Bottom">
<TextBlock Text="Example controls below listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<ListView FontSize="30">
<ListView.View>
<GridView>
<GridViewColumn Width="190" Header="Date" />
<GridViewColumn Width="200" Header="Day Of Week" DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn Width="120" Header="Year" DisplayMemberBinding="{Binding Year}" />
</GridView>
</ListView.View>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
</ListView>
</DockPanel>
</ScrollViewer>
To robi zdjęcie mecz No.3, prawda? Nie masz takiego samego problemu jak na zdjęciu nr 4, gdy twoje okno robi się naprawdę małe? – Jan
Tak, ustaw MinHeight na oknie, jeśli chcesz tego uniknąć. Zazwyczaj jest to jednak zależne od uznania użytkownika. Nie sądzę, że w takim przypadku można wiele zrobić i nie sądzę, że wielu użytkowników będzie chciało zmienić rozmiar okna na tak małą wysokość. – Timores
zamierzam oznaczyć to jako odpowiedź, chociaż jest to trochę jak "po prostu nie pozwól, aby okno stało się tak małe". Jakieś inne pomysły? – Jan