Цвет фона NumericUpDown не работает должным образом

Недавно у меня возникла необходимость написать версию элемента управления Windows NumericUpDown, в которой можно было бы указать, является ли значение обязательным. Это нужно было сделать, изменив задний цвет элемента управления. Я думал, что это будет достаточно просто, но, пытаясь это сделать, я обнаружил, что у него есть странный побочный эффект, заключающийся в том, что он не полностью контролирует ситуацию.

Используя код ниже, я вижу это:

Когда я удаляю элемент управления в форме Windows и изменяю свойство BackColor(ie. to Blue)вся часть номера элемента управления меняет цвет. Если, в качестве альтернативы, я изменю свой & quot; IsMandatory & quot; свойство, не совсем все изменения цвета спины(it leaves a border), Итак, если я изменю BackColor на Blue, а затем установлю IsMandatory на True, я получу элемент управления LightBlue(the mandatory colour) с синей каймой.

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

Идеи или объяснения с благодарностью приняты.

   public partial class MyNumericUpDown : NumericUpDown
   {
      private Boolean _isMandatory = false;
      private Color _mandatoryBackColor = Color.LightBlue;
      private Color _backColor = Color.FromKnownColor(KnownColor.Window);

      [DefaultValue(typeof(Color), "Window"), Description("Overridden property")]
      override public Color BackColor
      {
         get { return _backColor; }
         set
         {
            _backColor = value;
            MyResetColors();
         }
      }

      [DefaultValue(typeof(Color), "LightBlue"), Category("Appearance")]
      public Color MandatoryBackColor
      {
         get {return _mandatoryBackColor;}
         set 
         {
            _mandatoryBackColor = value;
            MyResetColors();
         }
      }

      [DefaultValue(false), Category("Behavior")]
      public Boolean IsMandatory
      {
         get { return _isMandatory; }
         set
         {
            _isMandatory = value;
            MyResetColors();
         }
      }

      private void MyResetColors()
      {
         base.BackColor = (this.IsMandatory ? this.MandatoryBackColor : this.BackColor);
      }
   }

Here's what it looks like:

Ответы на вопрос(3)

Ваш ответ на вопрос