Espacement entre les contrôles enfants dans la grid WPF

J’ai un ensemble de paires clé / valeur que je veux afficher sur une fenêtre WPF. J’utilise une grid pour les disposer ainsi:

              

Cependant, lorsque je l’affiche, les TextBox sont écrasées avec leurs bordures supérieure et inférieure touchant la zone de texte au-dessus / au-dessous. Quelle est la meilleure façon d’append un espace vertical aux lignes dans cette présentation?

Le moyen le plus simple est de définir une marge sur les contrôles individuels. Le paramétrer sur les TextBox devrait suffire, car une fois qu’elles sont espacées, les étiquettes seront placées verticalement au centre de chaque ligne et auront de l’espace de toute façon.

Vous pouvez le définir une fois en utilisant un style:

     ...  

Cela appenda une marge de 4 pixels au bas de toute zone de texte dans votre grid.

Une autre approche intéressante peut être vue ici .

Vous créez une classe pour définir la propriété Margin :

 public class MarginSetter { public static Thickness GetMargin(DependencyObject obj) => (Thickness)obj.GetValue(MarginProperty); public static void SetMargin(DependencyObject obj, Thickness value) => obj.SetValue(MarginProperty, value); // Using a DependencyProperty as the backing store for Margin. This enables animation, styling, binding, etc… public static readonly DependencyProperty MarginProperty = DependencyProperty.RegisterAttached(nameof(FrameworkElement.Margin), typeof(Thickness), typeof(MarginSetter), new UIPropertyMetadata(new Thickness(), MarginChangedCallback)); public static void MarginChangedCallback(object sender, DependencyPropertyChangedEventArgs e) { // Make sure this is put on a panel var panel = sender as Panel; if (panel == null) return; panel.Loaded += Panel_Loaded; } private static void Panel_Loaded(object sender, EventArgs e) { var panel = sender as Panel; // Go over the children and set margin for them: foreach (FrameworkElement fe in panel.Children.OfType()) fe.Margin = GetMargin(panel); } } 

Maintenant, vous avez un comportement de propriété attaché, de sorte que la syntaxe comme celle-ci fonctionne:

      

C’est le moyen le plus simple et le plus rapide de définir Margin sur plusieurs enfants d’un panel, même s’ils ne sont pas du même type. (Ie Button s, TextBox es, ComboBox es, etc.)

Qu’en est-il de l’alignement vertical de TextBox sur le centre?