WPF ScrollViewer показывает границу, когда ScrollBar виден - PullRequest
3 голосов
/ 08 июля 2011

Я хочу добавить рамку для моего прокрутки. Этот порядок должен отображаться только в том случае, если ScrollBar в ScrollViewer является видимым (VerticalScrollBarVisibility установлен в «Auto»)

Спасибо!

Ответы [ 2 ]

8 голосов
/ 06 апреля 2012

Вы можете сделать это, используя стили и триггеры, например:

<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>
3 голосов
/ 08 июля 2011

Используйте Binding и Converter.

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

...