2010-08-19 8 views
3

J'ai une forme simple avec quelques champs. J'ai donc décidé d'ajouter quelques DataField avec des zones de texte et des étiquettes. Les étiquettes gérables et leur longueur peuvent être changées et j'ai besoin de placer mes boîtes de texte à la même distance du côté gauche. Comment puis-je faire cette chose?Alignement du contenu des champs de données Silverlight

alt text

+1

Simplement, vous pouvez regrouper les étiquettes avec un StackPanel (avec l'orientation verticale par défaut). Le panneau de la pile va grandir pour s'adapter au contenu. HTH –

Répondre

2

Essayez le réglage

tk:DataField.IsFieldGroup="True" 

où tk est l'espace de noms de la boîte à outils pour le DataField; sur le conteneur parent de toutes les étiquettes de champs, vous voulez avoir la même largeur.

comme

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

Cela fera les étiquettes de la même largeur que la plus longue étiquette dans le FieldGroup.

1

Vous pouvez utiliser une grille

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

+1

Les champs de données ont des fonctionnalités supplémentaires qui sont très utiles pour moi. Donc j'ai besoin de solution avec eux – Evgeny

+2

Aah je n'ai pas vu ça! La réponse de HiTech Magic semble être la bonne façon de procéder. – NVM

0

j'ai décidé d'ajouter le contrôle avec logique suivant:

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

Maintenant, toutes les étiquettes alignées et bien.

Questions connexes