كيف يمكن ملء WPF StackPanel عموديًا من الأسفل إلى الأعلى؟

StackOverflow https://stackoverflow.com/questions/491647

  •  20-08-2019
  •  | 
  •  

سؤال

أحتاج أن أكون قادرًا على ملء ملف stackpanel مع buttons ولكن الأزرار يجب أن تظهر في الجزء السفلي من لوحة المكدس أولاً ثم يتم نشرها للأعلى.يتم إنشاء الأزرار ديناميكيًا ويوجد عدد غير معروف منها، لذا لن تنجح عملية الاختراق البصري.لقد حاولت تجربة المحاذاة الرأسية ولكن دون جدوى.

هل كانت مفيدة؟

المحلول

مثل ذلك:

<StackPanel VerticalAlignment="Bottom">
    ...
</StackPanel>

ولملء الأزرار لأعلى، يجب عليك إدراج الأزرار في الموضع 0، بدلاً من إضافتها.

نصائح أخرى

أو يمكنك تدوير StackPanel 180 درجة لجعل الأزرار تتكدس من الأسفل إلى الأعلى ثم تدوير الأزرار 180 درجة أخرى لوضعها في الجانب الأيمن مرة أخرى:

<StackPanel>
    <!-- rotate all buttons inside this panel -->
    <StackPanel.Resources>
        <Style TargetType="Button">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <RotateTransform Angle="180"/>
                </Setter.Value>
            </Setter>
        </Style>
    </StackPanel.Resources>

    <!-- rotate the stack panel -->
    <StackPanel.LayoutTransform>
       <RotateTransform Angle="180"/>
    </StackPanel.LayoutTransform>

    <!-- content -->
    <Button>1</Button>
    <Button>2</Button>

</StackPanel>

البديل الآخر هو استخدام DockPanel بدلاً من ذلك.

فقط قم بتعيين LastChildFill على false في DockPanel.

ثم قم بتعيين خاصية Dock المرفقة على كل زر تضيفه إلى الأسفل قبل إضافته إلى DockPanel.

مثال :

            var button = new Button();
            DockPanel.SetDock(button, Dock.Bottom);

أفضل طريقة لحل المشكلة هي تنفيذ حاوية مخصصة مشتقة من Stackpanel ولكن الحل السريع والقذر إذا تمت إضافة عناصر في وقت التشغيل

    public Window1()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
        {
            Button btn = new Button();
            btn.Content = "Button " + i;
            MyStack.Children.Insert(0, btn);
        }
    }

ما عليك سوى إدراج العنصر في الموضع 0 بدلاً من إضافته.

حاول وضع StackPanel داخل حاوية أخرى (وليس StackPanel؛ربما DockPanel) ومحاذاته للأسفل.ثم عندما تقوم بملء الأزرار، ضع كل زر جديد في الموضع الأول.

لقد وجدت أن استخدام شبكة موحدة مع عمود = 1 يعطي مكدسًا أنيقًا للتعبئة، أو مجموعة صفوف = 1 تعطي مكدسًا أنيقًا مملوءًا أفقيًا.والإضافة من الفهرس 0 ستعمل من الأسفل إلى الأعلى.

أحب حل التحولات بواسطة Nir.كنت أتساءل عما إذا كان من الممكن القيام بذلك باستخدام التحويلات.

تحذير واحد، على الرغم من:لا تستخدم خدعة التحويلات في عنصر تحكم قائم على ScrollView مثل ListBox لأن عملية شريط التمرير سيتم عكسها من المحتوى.من الممتع مشاهدته، طالما أنك لست المستخدم النهائي.;>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top