我在一个ItemsControl周围有一个wpf的滚动条,只有当列表长于窗口大小时才会显示。但是,当它被隐藏时,滚动条应该是一个空白空格。
如何删除此空格并“折叠”滚动条?
<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>
答案 0 :(得分:1)
当滚动条的可见性发生变化时,不会引发任何事件,但您可能会挂钩VerticalScrollBarVisibility和/或HorizontalScrollBarVisibility依赖项属性的更改通知。也许你可以使用这个小片段。
DependencyPropertyDescriptor scrollbarDesc =
DependencyPropertyDescriptor.FromProperty
(ScrollViewer.VerticalScrollBarVisibilityProperty, typeof(Visibility));
if (scrollbarDesc != null)
{
scrollbarDesc.AddValueChanged(scrollViewer1, delegate
{
// Add your propery changed logic here...
});
}
答案 1 :(得分:1)
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...
});
}
答案 2 :(得分:0)
你的问题实际上已经找到了答案。
您需要将滚动条的状态设置为Collapsed
而不是Invisible
:
scrollbar.Visibility = Collapsed;
这将删除元素,而不是仅隐藏它并在UI中为其保留空间。