2009-09-17 6 views
0

ItemsControl 주위에 wpf에 스크롤 막대가 있습니다.이 스크롤바는 목록이 창 크기보다 긴 경우에만 표시됩니다. 그러나 숨겨진 경우 스크롤 막대가 있어야하는 빈 공백이 있습니다.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

재생할 수 없습니다. 스크린 샷을 게시 할 수 있습니까? –

답변

0

실제로 질문에 답을 칠했습니다.

당신은 Collapsed보다는 Invisible에 스크롤 막대의 상태를 설정해야합니다

scrollbar.Visibility = Collapsed; 

이 단지 그것을 숨기고 UI에서 그것을위한 공간을 확보하기보다는 요소를 제거합니다.

+0

이것을 설정하기 위해 어떤 처리기를 사용할 수 있습니까? VerticalScrollBarVisibility = "Auto"로 설정 했으므로 현재 WPF가 처리합니다 ... OnScrollBarVisibilityChanged 이벤트 또는 이와 유사한 이벤트가 있습니까? – bluebit

1

스크롤 막대의 가시성이 변경 될 때 발생하는 이벤트는 없지만 VerticalScrollBarVisibility 및/또는 HorizontalScrollBarVisibility 종속성 속성의 변경 알림에 연결할 수 있습니다. 이 작은 발췌 문장을 사용할 수 있겠습니까?

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

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
} 
+0

고마워요! 확실히 유망한 것으로 보인다. 첫 번째 줄에 붙여 넣을 때 예외가 발생합니다. ArgumentException : 'Visibility'유형에 일치하는 DependencyObjectType이 없습니다. – bluebit

+0

Visibility를 ScrollBarVisibility로 변경해 보았습니다. 실제로는 그렇지만 여전히 동일한 오류가 발생합니다 .... – bluebit

1

Trainee4Life는 아이디어를 가지고 있지만, 당신은 단지 다른 특성 [ScrollViewer.ComputedVerticalScrollBarVisibilityProperty]에 끼어 대해서 typeof (에서 ScrollViewer)에 대해서 typeof (Visisbility)을 변경해야합니다.

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

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
}