0

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>
4

3 に答える 3

1

スクロールバーの可視性が変更されたときに発生するイベントはありませんが、VerticalScrollBarVisibility および/または Horizo​​ntalScrollBarVisibility 依存関係プロパティの変更通知にフックできる可能性があります。この小さなスニペットを使用できるかもしれません。

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

if (scrollbarDesc != null)
{
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate
    {
        // Add your propery changed logic here...
    });
}
于 2009-09-17T18:39:54.483 に答える
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...
    });
}
于 2009-10-08T20:21:46.887 に答える
0

あなたは実際にあなたの質問の答えにぶつかりました。

スクロールバーの状態を:Collapsedではなくに設定する必要があります。Invisible

scrollbar.Visibility = Collapsed;

これにより、要素を非表示にしてUIでスペースを予約するのではなく、要素が削除されます。

于 2009-09-17T12:24:15.057 に答える