2012-02-04 3 views
2

DataGrid의 IsMouseOver 속성에서 DataGrid 스크롤 막대의 가시성을 토글 할 수 있습니까? DataGrid 위로 마우스를 움직일 때 ScrollBar 보이게하고 DataGrid 밖으로 마우스를 이동할 때 보이지 않게하려고합니다. XAML 예가 인정 될 것입니다.마우스에서 DatGrid ScrollBar 가시성 변경?

<Window.Resources> 
    <local:MouseOverToScrollBarVisibility x:Key="MouseOverToScrollBarVisibility" /> 
</Window.Resources> 

을 그리고 ScrollViewer.VerticalScrollBarVisibility 부동산 재산 IsMouseOver에 바인딩을 사용합니다 :

[ValueConversion(typeof(bool), typeof(ScrollBarVisibility))] 
sealed class MouseOverToScrollBarVisibility : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((bool)value) ? ScrollBarVisibility.Auto : ScrollBarVisibility.Hidden; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

자원에 어딘가에 선언 :

<DataGrid ScrollViewer.VerticalScrollBarVisibility= 
      "{Binding IsMouseOver, 
        RelativeSource={RelativeSource Self}, 
        Converter={StaticResource MouseOverToScrollBarVisibility}}"> 
</DataGrid> 

답변

8

제가 적용됩니다

+0

저는 최상의 솔루션이며 코드 숨김 솔루션보다 개인적으로 XAML 솔루션을 선호합니다. 감사! –

4

은 값 변환기를 만들기 새로운 스타일, 다음과 같이 :

<Style x:Key="dataGridStyle" TargetType={x:Type DataGrid}> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     </Trigger> 
    </Style.Triggers> 
</Style>