【问题标题】:WPF ScrollViewer show border when ScrollBar is VisibleWPF ScrollViewer 在 ScrollBar 可见时显示边框
【发布时间】:2011-09-30 23:59:12
【问题描述】:

我想为我的 ScrollViewer 添加一个边框。仅当 ScrollViewer 的 ScrollBar 可见时才显示边框(VerticalScrollBarVisibility 设置为“Auto”)

谢谢!

【问题讨论】:

    标签: wpf wpf-controls binding scrollviewer


    【解决方案1】:

    您可以使用样式和触发器来执行此操作,如下所示:

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

    【讨论】:

    • 这是一种干净的方法,但是尝试将 BorderBrush 设置为透明或 BorderThickness 为 0 而不是设置 Border.Visibility 因为此代码片段现在将隐藏整个 Border 及其子项(其中的滚动查看器)当不需要滚动条时。
    【解决方案2】:

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

    不要忘记将您的转换器添加到资源中!

    GL&HF

    【讨论】:

    • 它不起作用。我的原因是,ScrollViewer 的 VerticalScrollBarVisibility 没有改变。它设置为“自动”,如果 ScrollBar 可见,则该属性仍为自动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多