C# Silverlight数据字段内容对齐
我需要一个简单的表单,它有一些字段。所以我决定添加一些带有文本框和标签的数据字段。标签易于管理,长度可以更改,我需要将文本框放置在与左侧相同的距离上。我怎么能做这件事 您可以使用网格C# Silverlight数据字段内容对齐,c#,.net,wpf,silverlight,C#,.net,Wpf,Silverlight,我需要一个简单的表单,它有一些字段。所以我决定添加一些带有文本框和标签的数据字段。标签易于管理,长度可以更改,我需要将文本框放置在与左侧相同的距离上。我怎么能做这件事 您可以使用网格 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinit
<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"/>
我决定用下一个逻辑添加控件:
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; }
void MyControl\u布局已更新(对象发送方,事件参数e)
{
if(this.columnseptor.ActualWidth!=0&&this.columnseptor.ActualWidth!=this.columnseptor.MinWidth)
{
this.IsLoaded=true;
SetWidth();
}
}
私有void SetWidth()
{
if(IsWidthSet)
返回;
如果(!this.IsLoaded)
返回;
var parentPanel=this.parentas面板;
if(parentPanel!=null)
{
var textFields=parentPanel.Children.Where(p=>p是BpTextField.Cast().ToList();
double max=此.LabelWidth;
foreach(textFields中的var textField)
{
max=Math.max(max,textField.LabelWidth);
如果(!textField.IsLoaded)
返回;
}
foreach(textFields中的var textField)
{
textField.LabelWidth=最大值;
}
this.LabelWidth=最大值;
}
}
公共bool已加载{get;set;}
公共bool IsWidthSet{get;set;}
现在,所有标签都对齐并对齐。尝试设置
tk:DataField.IsFieldGroup="True"
其中tk是数据字段的工具箱的名称空间;在所有字段标签的父容器上,您希望具有相同的宽度
像
。。。
这将使标签与字段组中最长标签的宽度相同。数据字段具有额外的功能,这对我非常有用。所以我需要他们的解决方案啊,我没看到!HiTech Magic的答案听起来是正确的。简单地说,您可以使用StackPanel(默认垂直方向)对标签进行分组。stackpanel将增长以适应内容。嗯
<Grid tk:DataField.IsFieldGroup="True">...