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正在处理一些用于正确更新对象的键值。是的,我用另一个控件尝试了这一点,它在那里工作。我想原因是按钮上有孩子,这也需要安排是的,这就是我在回答中写的。