Проверить значение параметра в компоненте

По туториалу написал компонент:

<UserControl x:Class="HlsDumpLib.GuiTestWPF.NumericUpDown"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:HlsDumpLib.GuiTestWPF"
             x:Name="root"
             mc:Ignorable="d" 
             d:DesignWidth="80" d:DesignHeight="20">
    <UserControl.Resources>
        <local:IntStringConverter x:Key="conv" />
    </UserControl.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="16" />
        </Grid.ColumnDefinitions>

        <TextBox Text="{Binding Value, ElementName=root, Converter={StaticResource conv}}"
                 HorizontalContentAlignment="Right" VerticalContentAlignment="Center"
                 Grid.Column="0" />
        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>

            <Button Name="btnIncrease" Content="+" FontSize="8" Padding="0" Grid.Row="0"
                    Click="btnIncrease_Click" ToolTip="Увеличить"  />
            <Button Name="btnDecrease" Content="-" FontSize="8" Padding="0" Grid.Row="1"
                    Click="btnDecrease_Click" ToolTip="Уменьшить"  />
        </Grid>
    </Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;

namespace HlsDumpLib.GuiTestWPF
{
    public partial class NumericUpDown : UserControl
    {
        public int MaxValue
        {
            get { return (int)GetValue(MaxValueProperty); }
            set { SetValue(MaxValueProperty, value); }
        }

        public static readonly DependencyProperty MaxValueProperty =
            DependencyProperty.Register("MaxValue", typeof(int), typeof(NumericUpDown),
                new PropertyMetadata(10));

        public int MinValue
        {
            get { return (int)GetValue(MinValueProperty); }
            set { SetValue(MinValueProperty, value); }
        }

        public static readonly DependencyProperty MinValueProperty =
            DependencyProperty.Register("MinValue", typeof(int), typeof(NumericUpDown),
                new PropertyMetadata(0));

        public int Value
        {
            get { return (int)GetValue(ValueProperty); }
            set { SetValue(ValueProperty, Clamp(value)); }
        }

        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
                new PropertyMetadata(5));

        public NumericUpDown()
        {
            InitializeComponent();
        }

        private void btnIncrease_Click(object sender, RoutedEventArgs e)
        {
            if (Value < MaxValue) { Value++; }
        }

        private void btnDecrease_Click(object sender, RoutedEventArgs e)
        {
            if (Value > MinValue) { Value--; }
        }

        private int Clamp(int n)
        {
            if (n < MinValue) { return MinValue; }
            if (n > MaxValue) { return MaxValue; }
            return n;
        }
    }
}

Многое ещё не дописано. Наткнулся на проблему.
Из редактора свойств этого компонента (или из XAML) можно задать значение Value, которое выходит за пределы MinValue <> MaxValue. Как это проверить? Или это норм для подобных компонентов?

Может быть через это можно DependencyProperty.ValidateValueCallback Property (System.Windows) | Microsoft Learn

А, не, нельзя если нужно знать другие свойства компонента. Тогда отсылают к CoerceValueCallback.
Dependency property callbacks and validation - WPF .NET | Microsoft Learn

Код от-туда целиком не копипастил. У меня вроде примерно то же самое написано, как я понимаю :thinking: Добавил callback CoerceValueCallback. Теперь мне при запуске выдают экскепшен:


Не пойму, что именно равно null и что за параметр такой - dp :thinking:

Заработало. Всё нормально. Я не все параметры передал.