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

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

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

Есть идеи?

Изменить: это, кажется, проблема с DevExpress GridControl, Вот пример, который демонстрирует поведение с Rectangleс, а 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 размеры вверх и вниз при изменении размера окна (возможно, вам придется настроить MinHeights если у вас монитор меньшего размера). Другие элементы управления корректно изменяют размер от макс. До мин. Первый прямоугольник имеет фиксированную ширину и высоту в качестве базового варианта.

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>
Другие вопросы по тегам