كيفية الحصول على ListBox ItemTemplate أن تمتد أفقيا على كامل عرض مربع القائمة?

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

  •  22-07-2019
  •  | 
  •  

سؤال

أريد أن يكون ListItems تمديد مع البرتقال خلفية العرض الكامل Listbox.

حاليا هم فقط واسعة مثل الاسم الأول + اسم العائلة.

لقد حدد كل عنصر يمكنني أن:HorizontalAlignment="التمدد".

أريد خلفية ListboxItems توسيع المستخدم تمتد Listbox لذلك أنا لا أريد أن أضع في القيم المطلقة.

ماذا علي أن أفعل حتى أن لون خلفية ListBoxItems ملء عرض مربع القائمة?

<Window x:Class="TestListBoxSelectedItemStyle.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestListBoxSelectedItemStyle"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <local:CustomerViewModel x:Key="TheDataProvider"/>

        <DataTemplate x:Key="CustomerItemTemplate">
            <Border CornerRadius="5" Background="Orange" HorizontalAlignment="Stretch" Padding="5" Margin="3">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Width="Auto">
                    <TextBlock HorizontalAlignment="Stretch">
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0} {1}">
                            <Binding Path="FirstName"/>
                            <Binding Path="LastName"/>
                        </MultiBinding>
                    </TextBlock.Text>
                    </TextBlock>
                </StackPanel>
            </Border>
        </DataTemplate>

    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{Binding Path=GetAllCustomers, Source={StaticResource TheDataProvider}}"
                 ItemTemplate="{StaticResource CustomerItemTemplate}"/>
    </Grid>
</Window>
هل كانت مفيدة؟

المحلول

أنا متأكد من أن هذا هو نسخة مكررة, ولكن أنا لا يمكن العثور على السؤال مع الجواب نفسه.

إضافة HorizontalContentAlignment="Stretch" إلى مربع القائمة.التي ينبغي أن تفعل خدعة.فقط كن حذرا مع الإكمال التلقائي لأنه من السهل جدا الحصول على HorizontalAlignment عن طريق الخطأ.

نصائح أخرى

وجدت حل آخر هنا, منذ ركضت في كل مشاركة...

هذا من مايلز الجواب:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 

هذا عملت بالنسبة لي.

إن البنود الخاصة بك أوسع من ListBox, إجابات أخرى هنا لن يساعد:العناصر في ItemTemplate تظل أوسع من ListBox.

الإصلاح التي عملت بالنسبة لي تم تعطيل شريط التمرير الأفقي, التي, على ما يبدو, كما يروي الحاوية من كل هذه العناصر تبقى سوى واسعة كما في مربع القائمة.

ومن ثم الجمع بين إصلاح للحصول على مربع قائمة البنود التي هي واسعة كما في مربع القائمة ، سواء كانوا أصغر بحاجة إلى التمدد أو أوسع ضرورة التفاف على النحو التالي:

<ListBox HorizontalContentAlignment="Stretch" 
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">

(اعتمادات شريط التمرير فكرة)

لأن الحدود هي تستخدم فقط من أجل المظهر المرئي ، هل يمكن وضعه في ListBoxItem هو ControlTemplate وتعديل خصائص هناك.في ItemTemplate يمكنك أن المكان الوحيد StackPanel و TextBlock.في هذه الطريقة, كما لا تزال نظيفة ، كما في مظهر عنصر التحكم سوف يكون التحكم فيها عن طريق ControlTemplate البيانات ليتم عرضها سيتم التحكم فيها عن طريق DataTemplate.

الإصلاح بالنسبة لي أن تعيين الخاصية HorizontalAlignment="Stretch" على ItemsPresenter داخل ScrollViewer..

آمل أن يساعد هذا شخص...

<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBox">
                    <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch">
                        <ItemsPresenter  Height="252" HorizontalAlignment="Stretch"/>
                    </ScrollViewer>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

أنا أيضا لدي نفس المشكلة كما حل السريع, لقد استخدمت مزيج لتحديد مقدار الحشو تم إضافتها.في حالتي كان 12, لذلك تستخدم سلبي الهامش للتخلص منه.الآن كل شيء يمكن الآن تركز بشكل صحيح

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