2012-02-04 13 views
2

DataGridのIsMouseOverプロパティで、データグリッドスクロールバーの表示を切り替えるにはどうすればよいですか? マウスがDataGridの上を移動するとScrollBarが表示され、マウスがDataGridから外れると非表示になります。 XAMLの例を理解できます。マウス上のDatGrid ScrollBarの可視性を変更しますか?

答えて

8

私が適用されます新しいスタイル、このようなもの:

<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> 
+0

私はXAMLソリューションをソリューションのコードビハインドよりもはるかに優れています。ありがとう! –

4

値コンバータを作成します。

[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(); 
    } 
} 

は、どこかのリソースでそれを宣言します。

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

そしてIsMouseOverプロパティにScrollViewer.VerticalScrollBarVisibilityプロパティをバインドするためにそれを使用する:

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