How do I space out the child elements of a StackPanel?

前端 未结 11 2128
长情又很酷
长情又很酷 2020-12-04 06:11

Given a StackPanel:


  Apple
  Banana
  

        
11条回答
  •  误落风尘
    2020-12-04 07:18

    My approach inherits StackPanel.

    Usage:

    
        
        
        
    
    

    All that's needed is the following short class:

    using System.Windows;
    using System.Windows.Controls;
    using System;
    
    namespace Controls
    {
        public class ItemSpacer : StackPanel
        {
            public static DependencyProperty CellPaddingProperty = DependencyProperty.Register("CellPadding", typeof(Thickness), typeof(ItemSpacer), new FrameworkPropertyMetadata(default(Thickness), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnCellPaddingChanged));
            public Thickness CellPadding
            {
                get
                {
                    return (Thickness)GetValue(CellPaddingProperty);
                }
                set
                {
                    SetValue(CellPaddingProperty, value);
                }
            }
            private static void OnCellPaddingChanged(DependencyObject Object, DependencyPropertyChangedEventArgs e)
            {
                ((ItemSpacer)Object).SetPadding();
            }
    
            private void SetPadding()
            {
                foreach (UIElement Element in Children)
                {
                    (Element as FrameworkElement).Margin = this.CellPadding;
                }
            }
    
            public ItemSpacer()
            {
                this.LayoutUpdated += PART_Host_LayoutUpdated;
            }
    
            private void PART_Host_LayoutUpdated(object sender, System.EventArgs e)
            {
                this.SetPadding();
            }
        }
    }
    

提交回复
热议问题