Можно ли использовать scrollviewer для горизонтального растяжения содержимого между минимальной и максимальной шириной?

У меня есть элемент управления, который содержит devexpress GridControl. Я хотел бы настроить ScrollViewer так, чтобы, когда область просмотра меньше минимальной ширины GridControl, появлялась горизонтальная полоса прокрутки. Затем, когда область просмотра изменяется, я бы хотел, чтобы полоса прокрутки исчезала, когда область просмотра больше, чем MinWidth, а GridControl растягивалась вместе с окном до тех пор, пока не будет достигнуто MaxWidth, после чего GridControl перестанет расти. Затем, и это та часть, которая кажется такой неуловимой, я хотел бы иметь возможность снова сжимать область просмотра и иметь с ней контракт GridControl до тех пор, пока не будет достигнуто «MinWidth» и снова не появится полоса прокрутки.

Пока что я могу добиться только роста GridControl - когда область просмотра сжимается, сразу появляется полоса прокрутки, и GridControl никогда не станет меньше.

Есть идеи?

Изменить: похоже, это проблема с DevExpress GridControl. Вот пример, демонстрирующий поведение с Rectangles, DataGrid и GridControl:

<UserControl xmlns:dxg="clr-namespace:DevExpress.Xpf.Grid;assembly=DevExpress.Xpf.Grid.v11.2"  x:Class="MyNamespace.ScrollViewerTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d">
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Rectangle Width="500" Height="200" Fill="AliceBlue" />
            <Rectangle Grid.Row="1" MinHeight="200" MaxHeight="400" MinWidth="500" MaxWidth="1000" Fill="Bisque" />
            <DataGrid Grid.Row="2" MinWidth="500" MaxWidth="10000" MinHeight="200" MaxHeight="400">                
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column 1" Width="Auto"/>
                    <DataGridTextColumn Header="Column 2" Width="Auto"/>
                    <DataGridTextColumn Header="Column 3" Width="Auto"/>
                    <DataGridTextColumn Header="Column 4" Width="Auto"/>
                </DataGrid.Columns>
            </DataGrid>
            <dxg:GridControl Grid.Row="3" MinWidth="500" MinHeight="200" MaxWidth="1000" MaxHeight="400"/>
        </Grid>

    </ScrollViewer>        

</UserControl>

Обратите внимание, что GridControl начинается с MaxWidth и не растягивается с остальными элементами управления. Кроме того, обратите внимание, что изменение размера по вертикали работает — GridControl увеличивается и уменьшается при изменении размера окна (возможно, вам придется настроить MinHeight, если у вас меньший монитор). Другие элементы управления правильно изменяют размер между максимальным и минимальным. Первый прямоугольник имеет фиксированную ширину и высоту в качестве базового случая.


person Erikest    schedule 28.06.2012    source источник


Ответы (1)


Кажется, это работает для меня (я заменил ListBox, а не получил GridControl):

    <ScrollViewer HorizontalAlignment="Stretch" Name="scrollViewer1" VerticalAlignment="Stretch" Margin="8" HorizontalScrollBarVisibility="Auto">
        <ListBox Name="listBox1" MinWidth="400" MaxWidth="600" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
    </ScrollViewer>
person Michael    schedule 28.06.2012
comment
Спасибо, Майкл, я обновил свой вопрос, включив в него пример поведения, которое, похоже, связано с элементом управления devexpress. Я также включил devexpress в качестве тега, чтобы быть более конкретным. - person Erikest; 28.06.2012