Переопределить меру / упорядочить скрывает кнопку управления

У меня есть следующее

public class MatrixButton : Button
{
  public MatrixButton()
  {
    Height = 20;
    Width = 44;
    Content = "foo";
  }

  protected override Size MeasureOverride(Size constraint)
  {
    var measureOverride = new Size(44, 20);
    return measureOverride;
  }

  protected override Size ArrangeOverride(Size arrangeBounds)
  {
    var arrangeOverride = new Size(44, 20);
    return arrangeOverride;
  }
}

Теперь я помещаю эту кнопку просто в пустое окно, вот так:

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();
    Content = new MatrixButton();

  }
}

Почему-то эта кнопка не видна в окне. Кто-нибудь знает почему? Если я удаляю переопределения, кнопка отображается правильно конечно...

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

1 ответ

Решение

Даже если вы хотите ограничить размер, вы все равно должны вызывать базовые методы для дочерних элементов Button быть измеренным и устроенным как ожидалось:

protected override Size MeasureOverride(Size constraint)
{
    var measureOverride = new Size(44, 20);
    base.MeasureOverride(measureOverride);
    return measureOverride;
}

protected override Size ArrangeOverride(Size arrangeBounds)
{
    var arrangeOverride = new Size(44, 20);
    base.ArrangeOverride(arrangeOverride);
    return arrangeOverride;
}
Другие вопросы по тегам