2014-10-01 3 views
1

Я пытаюсь получить расстояние в пикселе между верхней частью элемента управления и серединой моей вертикальной полосы прокрутки (не все scrollviewer, только панель, которую вы можете перетащить, чтобы прокрутить элемент управления). Я не понимаю, какую собственность я должен использовать. Это код, который я написал:Как получить высоту перетаскиваемой полосы в scrollviewer?

double barHeight = /*to do*/; 
double barUpperEdge = scrollViewer.VerticalOffset; 

double distance = barUpperEdge + (barHeight/2); 

Другой вопрос: что является mesurament единица scrollViewer.VerticalOffset? Если он не в пикселях, то что делать?

+0

Звучит сложно, для чего нужна эта информация? Чего вы пытаетесь достичь? – musefan

+0

Я пытаюсь переместить 'TextBlock' вверх и вниз в стороне от панели. –

+0

* который является единицей измерения 'ScrollViewer.VerticalOffset'? * ... пикселей. – Sheridan

ответ

2

Вы можете рассчитать это значение из IScrollInfo Interface. ScrollViewer Class реализует этот интерфейс и предоставляет соответствующие свойства, которые вам нужно использовать. Насколько я помню, вам необходимо использовать три свойства:

ExtentHeight - Получает значение, которое содержит вертикальный размер.

ViewportHeight - Получает значение, которое содержит вертикальный размер окна просмотра содержимого.

VerticalOffset - Получает значение, содержащее вертикальное смещение прокрученного содержимого.

Для того, чтобы объяснить немного дальше, viewport относится к видимой области ScrollViewer и Extent представляет собой общий размер области прокрутки. VerticalOffset описывает количество прокручиваемого прокручиваемого содержимого. Используя эти три значения, вы сможете рассчитать свои требуемые значения, относящиеся к ScrollBar. Попробуйте что-то вроде этого:

double barHeight = ViewportHeight * scrollviewer.ActualHeight/ExtentHeight; 

UPDATE >>>

Пожалуйста, обратите внимание, что, как правило, плохая практика, чтобы использовать постоянные значения в вычислениях. По этой причине Microsoft обнаружила множество общих свойств. В вашем случае, я считаю, что вы можете использовать в SystemParameters.VerticalScrollBarButtonHeight property, хотя вам может понадобиться, чтобы добавить что-то, чтобы приспособить Padding и/или Margin значения:

double barHeight = ViewportHeight * (scrollviewer.ActualHeight - 2 * 
    SystemParameters.VerticalScrollBarButtonHeight)/ExtentHeight; 

Вы знаете ... Я просто подумал о чем-то ... вы может даже быть в состоянии получить необходимый палец Height из этих SystemParameters ... вы могли попробовать SystemParameters.VerticalScrollBarThumbHeight Property, хотя я не думаю, что он будет работать с пользовательскими ScrollBar с.

+0

Да! 'barHeight = ViewportHeight * (scrollviewer.ActualHeight-40)/ExtentHeight' -40, потому что на фактической высоте есть две стрелки вверх и вниз по полосе прокрутки –

+0

+1 Спасибо за обновление ... У меня не было времени на работу что именно должен быть расчет ... Я буду обновлять ответ для будущих пользователей. – Sheridan

Смежные вопросы