Выравнивание содержимого полей данных Silverlight - PullRequest
3 голосов
/ 20 августа 2010

Я простая форма, которая имеет несколько полей.Поэтому я решил добавить несколько DataField с текстовыми полями и метками.Этикетки можно контролировать, их длину можно изменить, и мне нужно разместить текстовые поля на одинаковом расстоянии от левой стороны.Как я могу это сделать?

alt text

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

Попробуйте установить

tk:DataField.IsFieldGroup="True"

где tk - пространство имен инструментария для DataField; на родительском контейнере всех меток полей, которые вы хотите иметь одинаковую ширину.

как

<Grid tk:DataField.IsFieldGroup="True">...

Это сделает метки той же ширины, что и самая длинная метка в FieldGroup.

1 голос
/ 20 августа 2010

Вы можете использовать сетку

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

0 голосов
/ 21 августа 2010

Я решил добавить контроль со следующей логикой:

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

Теперь все метки выровнены и исправны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...