C# 覆盖测量/排列将隐藏按钮控件

C# 覆盖测量/排列将隐藏按钮控件,c#,wpf,arrangeoverride,C#,Wpf,Arrangeoverride,我有以下几点 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 m

我有以下几点

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();

  }
}
由于某些原因,该按钮在窗口中不可见。有人知道为什么吗? 如果我删除覆盖,按钮显示正确,当然

编辑:
原因是按钮集成在一个复杂的布局中,其中有许多按钮,布局过程会耗费大量时间,但按钮的大小将始终保持不变,即使您希望缩小大小,您仍然应该调用
按钮的子元素的基本方法,以便按照预期进行测量和排列:

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

所有这些覆盖的意义何在?。只需设置宽度和高度。无论如何,您可能需要调用基类方法。就像Clemens建议的那样,我不明白这一点,但我建议您在完成工作后调用基类函数。很可能是base正在处理一些用于正确更新对象的键值。是的,我用另一个控件尝试了这一点,它在那里工作。我想原因是按钮上有孩子,这也需要安排是的,这就是我在回答中写的。