当ScrollBar可见时,WPF ScrollViewer显示边框

rak*_*ete 3 wpf binding scrollviewer wpf-controls

我想为我的scrollviewer添加边框.仅当ScrollViewer的ScrollBar可见时(VerticalScrollBarVisibility设置为"Auto")才会显示此顺序

谢谢你!

小智 8

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个干净的方法但是尝试将BorderBrush设置为Transparent或BorderThickness为0而不是设置Border.Visibility,因为此代码片段现在将在不需要滚动条时隐藏整个Border及其子节点(其中的scrollviewer). (2认同)

stu*_*bax 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

和你的 xaml 相比:

 <ScrollViewer Name="blah">
      <Border BorderThickness="{Binding ElementName=blah, Path=VerticalScrollBarVisibility , Converter={StaticResources VisibilityToBorder}}">
 </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

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

GL&HF