Как расширить содержимое окна, когда полоса прокрутки не отображается в wpf - PullRequest
0 голосов
/ 17 сентября 2009

У меня есть полоса прокрутки в wpf вокруг ItemsControl, которая видна только тогда, когда список длиннее размера окна. Однако, когда он скрыт, там есть пустое белое пространство, где должна быть полоса прокрутки.

Как я могу удалить это место и вместо этого "свернуть" полосу прокрутки?

<ScrollViewer VerticalScrollBarVisibility="Auto"
              HorizontalAlignment="Stretch"
              HorizontalContentAlignment="Left"
              VerticalContentAlignment="Top"
              HorizontalScrollBarVisibility="Disabled">
    <ItemsControl ItemsSource="{Binding Path=ContactGroups}"
                  Width="Auto"
                  MinWidth="231"
                  MinHeight="342"
                  ScrollViewer.VerticalScrollBarVisibility="Disabled"
                  Height="Auto" 
                  HorizontalContentAlignment="Left" 
                  VerticalContentAlignment="Top"
                  HorizontalAlignment="Stretch">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <c:ContactGroupControl />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>

Ответы [ 3 ]

1 голос
/ 17 сентября 2009

Нет никаких событий, которые возникают при изменении видимости полосы прокрутки, но, возможно, вы могли бы подключиться к уведомлениям об изменении свойств зависимостей VerticalScrollBarVisibility и / или HorizontalScrollBarVisibility. Может быть, вы могли бы использовать этот маленький фрагмент.

DependencyPropertyDescriptor scrollbarDesc =
    DependencyPropertyDescriptor.FromProperty
    (ScrollViewer.VerticalScrollBarVisibilityProperty, typeof(Visibility));

if (scrollbarDesc != null)
{
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate
    {
        // Add your propery changed logic here...
    });
}
1 голос
/ 09 октября 2009

У Trainee4Life есть идея, но вам просто нужно подключиться к другому свойству [ScrollViewer.ComputedVerticalScrollBarVisibilityProperty] и изменить typeof (Visisbility) на typeof (ScrollViewer).

DependencyPropertyDescriptor scrollbarDesc =
    DependencyPropertyDescriptor.FromProperty
    (ScrollViewer.ComputedVerticalScrollBarVisibilityProperty, typeof(ScrollViewer));

if (scrollbarDesc != null)
{
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate
    {
        // Add your propery changed logic here...
    });
}
0 голосов
/ 17 сентября 2009

Вы действительно нашли ответ на свой вопрос.

Вам нужно установить состояние полосы прокрутки на Collapsed вместо Invisible:

scrollbar.Visibility = Collapsed;

Это удаляет элемент, а не просто скрывает его и резервирует место для него в пользовательском интерфейсе.

...