Итак, я создал пользовательский текстовый ящик, который будет позволять только цифры:
public partial class IntegerTextBox : TextBox
{
protected override void OnTextChanged(TextChangedEventArgs e)
{
base.OnTextChanged(e);
Text = new String(Text.Where(c => Char.IsDigit(c)).ToArray());
SelectionStart = Text.Length;
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что при создании этого эфира таким образом
IntegerTextBox textBox = new IntegerTextBox() {... };
Или
<u:IntegerTextBox/>
в моем .xaml
Он также переопределяет стиль по умолчанию, используемый средой, в которой я работаю (Milestone Systems). Таким образом, вместо того, чтобы получать серые текстовые поля, которые я должен получить, я получаю Windows Стандартный белый текстовый ящик.
В документации Microsoft я нашел похожий пример с объяснением, но, похоже, не могу найти способ заставить это работать: пример переопределения
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
// Insert code to do custom painting.
// If you want to completely change the appearance of your control,
// do not call base.OnPaint(pe).
}
Насколько я понимаю, он говорит: не вызывайте
base.OnTextChanged(e);
(в моем случае ) если вы не хотите менять внешний вид элемента управления. Я попытался удалить его и получил те же результаты.