覆盖 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;
}
我有以下
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;
}