ETO表单中的动态布局缓慢

时间:2018-08-04 09:59:38

标签: c# layout eto

我正在尝试在Eto Forms中创建一个动态布局,该布局具有分为50/50的两列。 似乎默认行为是给行中的最后一个控件剩余的空间。然后,我创建了一个事件处理程序,将控件的大小调整为画布宽度的1/2。此方法有效(请参见图),但是在调整窗口大小时速度很慢。重绘似乎滞后了几毫秒,因此画布的某些部分是黑色的。 在ETO中有更好的方法吗?

Two columns of controls

我在下面粘贴我的代码。窗口中有大约20个控件,为清楚起见,我将其简化为2个。

public class MyLayout : DynamicLayout
{
 public CheckBox PeopleIsOn = new CheckBox() { Text = "On/Off" };
 public Label PeopleLabel = new Label { Text = "People" };

 public MyLayout(){
 PeopleIsOn.SizeChanged += (s, e) =>
            {
                PeopleLabel.Width = Width / 2;
                Invalidate();
            };
        this.BeginVertical();

        this.BeginHorizontal();
        this.Add(PeopleLabel);
        this.Add(PeopleIsOn);
        this.EndHorizontal();

        this.EndVertical();
}
}

在WPF中,使用<ColumnDefinition Width="*" />可以轻松实现。 Eto.Forms是否有等效功能?

1 个答案:

答案 0 :(得分:0)

我尝试使用TableLayout代替DynamicLayout,它对我有用。

public class MyLayout : TableLayout
{
    public CheckBox PeopleIsOn = new CheckBox() { Text = "On/Off" };
    public Label PeopleLabel = new Label { Text = "People" };

    public CheckBox OtherIsOn = new CheckBox() { Text = "On/Off" };
    public Label OtherLabel = new Label { Text = "Other" };

    public MyLayout()
    {
        this.Rows.Add(new TableRow(
            new TableCell(PeopleLabel, true), // the true argument of TableCell is important in the cells of the first row
            new TableCell(PeopleIsOn, true)
        ));
        this.Rows.Add(new TableRow(
            OtherLabel, // from second row the parameter is no longer needed
            OtherIsOn
        ));
    }
}