А>Суть проблемы: пишется составной контрол — Slider + TextBox, оба элемента привязаны к двухсторонней привязкой к DependencyProperty "Value" этого контрола. Т.е. дергаем слайдер — меняется текст, вводим текст — перемещается слайдер. Соответственно к Value извне также привязывается свойство объекта, над которым мы все эти действия и производим. Внутри самого контрола значение корректируется через CoerceValueCallBack (выход за границы, количество знаков после запятой и т.д.), но вот наружу по биндингу прилетает значение не скорректированное. Получается что биндинг происходит раньше установки самого свойства и, соответственно, до вызова CoerceValueCallback! Как с этим бороться?
Поищите в msdn "Dependency Property Value Precedence", почитайте, может понятнее будет.
А практически, когда в PropertyChangedCallback прилетает новое значение, там можно проверить, если значение свойства не скорректированное, то явно вызвать CoerceValue для этого свойства. Как-то так:
if (!DependencyPropertyHelper.GetValueSource(this, e.Property).IsCoerced)
{
CoerceValue(e.Property);
// return;
}