Отслеживание видимости вертикального ScrollBar в ScrollViewer

170
23 февраля 2018, 14:59

Есть ScrollViewer:

<ScrollViewer Grid.Row="1"
              VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Disabled"
              HorizontalAlignment="Stretch"
              HorizontalContentAlignment="Stretch">
        <local:LogCollectionView/>
    </ScrollViewer>

Есть ли свойство, которое позволяет отследить в ViewModel виден вертикальный ScrollBar или нет? Это необходимо для того, чтобы изменять отступ шапки таблицы, которая находится над этим ScrollViewer.

Answer 1

VM не должна знать виден ли скроллбар в GUI или нет. GUI вообще может не существовать или быть консольным и это не должно повлиять на работоспособность VM. В этом и есть смысл MVVM. Видимость скроллбара и всевозможные отступы это чисто компетенция View.

А вообще узнать, видим ли сейчас скроллбар можно заглянув в свойство ComputedVerticalScrollBarVisibility, его изменения удобно отслеживать по событию ScrollChanged:

public MainWindow()
{
    InitializeComponent();
    MyScrollViewer.ScrollChanged += MyScrollViewer_ScrollChanged;
}
private void MyScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    var v = MyScrollViewer.ComputedVerticalScrollBarVisibility;
}

v при этом будет иметь обычный тип Visibility и принимать значение Collapsed или Visible

READ ALSO
RequireJS и плагины jQuery

RequireJS и плагины jQuery

Я только начал разбираться с RequireJS, но у меня появился уже вопросДопустим я имею два плагина для jQuery: a

209
Javascript вернуться в начало кода

Javascript вернуться в начало кода

Для того чтобы снова ввести число, нужно обновить страничкуМожно ли сделать, чтобы после неверного ответа программа сама снова предлагала...

318
Цикл while является устаревшим? [требует правки]

Цикл while является устаревшим? [требует правки]

В Уроках Javascript с нуляУрок 6 - Циклы утверждается, что этот цикл устаревший (между 13 и 15 минутами)

220