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