覆盖 measure/arrange 将隐藏按钮控件

Override measure/arrange will hide button control

我有以下

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;
  }
}

现在我把那个按钮放在一个空的 window 中,就像这样:

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

  }
}

由于某种原因,该按钮在 window 中不可见。有谁知道为什么? 如果我删除覆盖,按钮当然会正确显示...

编辑: 原因是按钮集成在一个复杂的布局中,其中有很多按钮,布局过程会消耗大量时间,但按钮的大小将始终相同

即使想限制大小,还是要调用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;
}