[wpf] كيف يمكنني الحصول على شريط تمرير عمودي في ListBox الخاص بي؟



2 Answers

يحتوي ListBox بالفعل على ScrollViewer . بشكل افتراضي ، سيظهر ScrollBar عند وجود محتوى أكثر من المساحة. لكن بعض الحاويات StackPanel مع محتوياتها (مثل StackPanel ) ، لذلك لا يوجد "محتوى أكثر من الفضاء". في مثل هذه الحالات ، يتم دائمًا إعطاء ListBox المساحة المطلوبة للمحتوى.

من أجل حساب حالة وجود محتوى أكثر من المساحة ، يجب معرفة الحجم. تأكد من أن ListBox الخاص بك يحتوي على حجم مقيد ، إما عن طريق تعيين الحجم بشكل صريح على ListBox نفسه ، أو من لوحة المضيف.

في حالة لوحة المضيف هي عمودي StackPanel وتريد VerticalScrollBar يجب عليك تعيين الارتفاع على ListBox نفسه. بالنسبة للأنواع الأخرى من الحاويات ، مثل Grid ، يمكن أن تكون ListBox بالحاوية. على سبيل المثال ، يمكنك تغيير شفرتك الأصلية لتبدو هكذا:

<Grid Name="grid1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0" Name="lstFonts" Margin="3"
                 ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
    </Grid>
</Grid>

لاحظ أنها ليست الحاوية الفورية المهمة فقط. في المثال الخاص بك ، الحاوية الفورية هي Grid ، ولكن نظرًا لأن Grid StackPanel بواسطة StackPanel ، يتم توسيع StackPanel الخارجي StackPanel الفرعية المباشرة ، بحيث يمكن أن يتوسع ذلك الطفل StackPanel مع طفله ( ListBox ).

إذا قمت بالحد من الارتفاع في أي نقطة - عن طريق ضبط ارتفاع ListBox ، عن طريق ضبط ارتفاع Grid الداخلية ، أو ببساطة عن طريق جعل الحاوية الخارجية Grid - فسيظهر شريط تمرير رأسي تلقائيًا في أي وقت يكون فيه عدد كبير جدًا عناصر القائمة لتناسب في السيطرة.

Question

في المثال أدناه لدي ListBox مع العشرات من أسماء الخطوط فيه.

كنت أعتقد أنه سيكون له شريط تمرير عمودي عليه تلقائيًا بحيث يمكنك تحديد أي خط ، وليس فقط أوله في القائمة ، لكنه لا يفعل ذلك.

لذلك أضفت "ScrollViewer" والذي يضع "منطقة شريط التمرير" على اليمين ولكن لا يوجد شريط التمرير في ناحية شريط التمرير بحيث يمكنك التمرير (!).

لماذا لا شريط التمرير التلقائي وكيف يمكنني إجبارها على شريط التمرير؟

<StackPanel Name="stack1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ScrollViewer>
            <ListBox Grid.Row="0" Name="lstFonts" Margin="3"  ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
        </ScrollViewer>
    </Grid>
</StackPanel>



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




كنت تواجه نفس المشكلة ، كان لدي ComboBox تليها ListBox في StackPanel وكان شريط التمرير ل ListBox لا تظهر. أنا حل هذا عن طريق وضع الاثنين في DockPanel بدلا من ذلك. أنا وضعت ComboBox DockPanel.Dock = "أعلى" والسماح ل ListBox ملء المساحة المتبقية.




Related