在鼠标悬停时更改 DataGrid ScrollBar 的可见性?

Posted

技术标签:

【中文标题】在鼠标悬停时更改 DataGrid ScrollBar 的可见性?【英文标题】:Change DataGrid ScrollBar visibility on mouse over? 【发布时间】:2012-02-26 18:02:36 【问题描述】:

如何在 DataGrid 的 IsMouseOver 属性上切换 DataGrid 滚动条的可见性?

我想让滚动条在鼠标悬停在 DataGrid 上时可见,而在鼠标离开 DataGrid 时不可见。一个 XAML 示例将不胜感激。

【问题讨论】:

【参考方案1】:

我会应用一种新样式,如下所示:

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

【讨论】:

迄今为止最好的解决方案,我个人更喜欢 XAML 解决方案而不是代码隐藏解决方案。谢谢!【参考方案2】:

创建一个值转换器:

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

【讨论】:

以上是关于在鼠标悬停时更改 DataGrid ScrollBar 的可见性?的主要内容,如果未能解决你的问题,请参考以下文章

EasyUI的Datagrid鼠标悬停显示单元格内容

在鼠标悬停时更改背景颜色并在鼠标悬停后将其删除

在菜单组件中鼠标悬停时更改按钮的图标和文本颜色

鼠标悬停时隐藏组合框边框

如何在鼠标悬停时更改边框粗细

Bootstrap - 在鼠标悬停时更改图标图像[重复]