【问题标题】:Override measure/arrange will hide button control覆盖测量/排列将隐藏按钮控制
【发布时间】:2018-10-03 12:12:27
【问题描述】:

我有以下

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

  }
}

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

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

【问题讨论】:

  • 所有这些覆盖的意义在哪里?只需设置宽度和高度。无论如何,您可能需要调用基类方法。
  • 就像 Clemens 建议的那样,我不明白这一点,但我建议您在完成工作后调用基本函数。很可能基础正在处理一些用于正确更新对象的键值。

标签: c# wpf arrangeoverride


【解决方案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;
}

【讨论】:

  • 是的,我用另一个控件尝试过,它在那里工作。我猜原因是按钮有孩子也需要安排
  • 是的,这就是我认为我在答案中写的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多