我有一些领域的简单形式。所以我决定添加几个带文本框和标签的DataField。标签易于管理,长度可以更改,我需要将文本框放在距离左侧相同的位置。我该怎么做呢?
答案 0 :(得分:2)
尝试设置
tk:DataField.IsFieldGroup="True"
其中tk是DataField工具包的命名空间;在所有字段标签的父容器上,您希望宽度相同。
像
<Grid tk:DataField.IsFieldGroup="True">...
这将使标签的宽度与FieldGroup中最长的标签相同。
答案 1 :(得分:1)
您可以使用网格
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Content="Label" Grid.Row="0" Grid.Column="0"/>
<TextBox Grid.Row="0" Grid.Column="1"/>
<Label Content="Long Label" Grid.Row="1" Grid.Column="0"/>
<TextBox Grid.Row="1" Grid.Column="1"/>
答案 2 :(得分:0)
我决定使用下一个逻辑添加控件:
void MyControl_LayoutUpdated(object sender, EventArgs e)
{
if (this.columnSeparator.ActualWidth!=0&&this.columnSeparator.ActualWidth != this.columnSeparator.MinWidth)
{
this.IsLoaded = true;
SetWidth();
}
}
private void SetWidth()
{
if (IsWidthSet)
return;
if (!this.IsLoaded)
return;
var parentPanel = this.Parent as Panel;
if (parentPanel != null)
{
var textFields = parentPanel.Children.Where(p => p is BpTextField).Cast<BpTextField>().ToList();
double max = this.LabelWidth;
foreach (var textField in textFields)
{
max = Math.Max(max, textField.LabelWidth);
if (!textField.IsLoaded)
return;
}
foreach (var textField in textFields)
{
textField.LabelWidth = max;
}
this.LabelWidth = max;
}
}
public bool IsLoaded { get; set; }
public bool IsWidthSet { get; set; }
现在所有标签都对齐了。