WPF - Определяется ли где-нибудь смещение при работе с ползунком?

Я работал над правильным слайдером для моего проекта C# WPF.

Я хотел создать слайдер с фоном, который указывает на разные части процесса, добавив разные цвета к каждому разделу на слайдере. Кроме того, я хотел добавить небольшие индикаторы (например, галочки по умолчанию, но нестандартную форму и неправильную позицию) к фону.

Я достиг этого, создав кисть для рисования и добавив соответствующие цветные прямоугольники. Казалось, что это работает нормально, но небольшое искажение все еще присутствовало, поэтому я продолжил исследование и понял следующее:

С помощью slider.ActualWidth я получаю ширину всего виджета. Таким образом, чтобы создать фон, покрывающий фактическую часть "слайдера", мне нужно знать расстояние от виджета до фактического слайдера. (См. Изображение)

Я измерил расстояние в очень маленьком окне, в полноэкранном режиме и растянулся на двух экранах. Кажется, это расстояние всегда 5 пикселей. Я попробовал Google и просмотрел информацию, которую WPF предоставляет на его страницах, но я либо перечитал ее, либо информации об этом нет.

Могу ли я быть уверен, что это расстояние всегда 5 пикселей? В каком месте хранится такая информация? Есть ли другой способ определить размер самого слайдера?

1 ответ

Решение

Предполагая, что вы не возились с шаблоном Slider, вы можете просто пройтись по визуальному дереву и проверить ActualWidth дорожки:

Border b = VisualTreeHelper.GetChild(slider, 0) as Border;
Grid g = VisualTreeHelper.GetChild(b, 0) as Grid;
Border track = VisualTreeHelper.GetChild(g, 2) as Border;
Console.WriteLine("Track ActualWidth: " + track.ActualWidth);
Другие вопросы по тегам