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">...