Изменить видимость DatGrid ScrollBar при наведении мыши? - PullRequest
3 голосов
/ 04 февраля 2012

Как я могу переключить видимость полосы прокрутки сетки данных в свойстве IsMouseOver DataGrid?Я хочу сделать ScrollBar видимым, когда мышь находится над DataGrid, и невидимым, когда мышь выходит из DataGrid.Был бы признателен за пример XAML.

Ответы [ 2 ]

11 голосов
/ 05 февраля 2012

Я бы применил новый стиль, что-то вроде этого:

<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>
4 голосов
/ 04 февраля 2012

Создать конвертер значений:

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

И использовать его для привязки ScrollViewer.VerticalScrollBarVisibility свойства к IsMouseOver свойство:

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