WPF滚动条显示边框当滚动条可见

5
我想要给我的ScrollViewer添加一个边框。当ScrollViewer的滚动条可见时(VerticalScrollBarVisibility设置为“Auto”),边框应该只显示出来。
谢谢!
2个回答

9
您可以使用样式和触发器来实现此操作,例如:
<Border BorderBrush="Black">
    <Border.Style>
        <Style>
            <Setter Property="Border.Visibility" Value="Visible" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=theScrollViewer, Path=ComputedVerticalScrollBarVisibility}" Value="Collapsed">
                    <Setter Property="Border.Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <ScrollViewer Name="theScrollViewer">
    </ScrollViewer>
</Border>

2
这是一种干净的方法,但是尝试将BorderBrush设置为Transparent或将BorderThickness设置为0,而不是设置Border.Visibility,因为当前这段代码将在不需要滚动条时隐藏整个Border及其子元素(其中包括其中的scrollviewer)。 - Viv

4
使用 BindingConverter
public sealed class VisibilityToBorderThicknessConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        try
        {
            var flag = (Visibility)value;
            if (flag == Visibility.Visible)
                return new Thickness(0);
            else
                return new Thickness(1);
        }
        catch
        {
            return new Thickness(0);
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
          throw new NotImplementedException();
    }
}

然后是您的 XAML:

 <ScrollViewer Name="blah">
      <Border BorderThickness="{Binding ElementName=blah, Path=VerticalScrollBarVisibility , Converter={StaticResources VisibilityToBorder}}">
 </ScrollViewer>

不要忘记将转换器添加到资源中!
祝你好运!

它不起作用。我认为原因是ScrollViewer的VerticalScrollBarVisibility没有改变。它被设置为“Auto”,如果滚动条可见,则该属性仍然是自动的。 - rakete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接