在鼠标悬停时更改 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 的可见性?的主要内容,如果未能解决你的问题,请参考以下文章