如何得到一個ListBox ItemTemplate來水平拉伸ListBox的整個寬度?

我想讓ListItems以其橙色背景擴展到Listbox的整個寬度。 ide

目前,它們的大小僅與名字+姓氏同樣。 spa

我已經設置了全部能夠設置的元素:Horizo​​ntalAlignment =「 Stretch」。 code

我但願ListboxItems的背景在用戶拉伸Listbox時擴展,因此我不想輸入絕對值。 orm

我該怎麼作才能使ListBoxItems的背景顏色填充ListBox的寬度? xml

<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>

#1樓

若是您的項目比ListBox ,則此處的其餘答案將無濟於事: ItemTemplate的項目仍然比ListBox寬。 get

對我有用的解決方法是禁用水平滾動條,顯然,這也告訴容器全部這些項目的寬度僅與列表框同樣寬。 it

所以,得到與列表框同樣寬的ListBox項的組合修補程序以下:它們較小且須要拉伸,仍是較寬且須要包裝,以下所示: io

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

感謝滾動條的想法ast


#2樓

因爲邊框僅用於視覺外觀,所以能夠將其放入ListBoxItem的ControlTemplate中,而後在其中修改屬性。 在ItemTemplate中,您只能放置StackPanel和TextBlock。 這樣,代碼也保持乾淨,由於控件的外觀將經過ControlTemplate進行控制,而要顯示的數據將經過DataTemplate進行控制。 容器


#3樓

自從我遇到這兩個職位以來,我在這裏找到了另外一個解決方案 ...

這是從邁爾斯的答案:

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

這對我有用。


#4樓

對我來講,解決方法是在ScrollViewe r。中的ItemsPresenter上設置屬性HorizontalAlignment="Stretch"

但願這能夠幫助某人...

<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>

#5樓

我也遇到了一樣的問題,做爲一種快速的解決方法,我使用blend來肯定要添加多少填充。 在個人例子中是12,因此我用負的餘量來消除它。 如今一切均可以正確居中了

相關文章
相關標籤/搜索