Silverlight数据字段内容对齐

时间:2010-08-19 20:09:01

标签: c# .net wpf silverlight

我有一些领域的简单形式。所以我决定添加几个带文本框和标签的DataField。标签易于管理,长度可以更改,我需要将文本框放在距离左侧相同的位置。我该怎么做呢?

alt text

3 个答案:

答案 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; }

现在所有标签都对齐了。