을 얻는 방법 ListBox ItemTemplate 스트레칭이 수평으로의 전체 너비 ListBox?

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

  •  22-07-2019
  •  | 
  •  

문제

내가 갖고 싶어 ListItems 을 확장하는 그들의 오렌지색 바탕의 Listbox.

현재 그들은만큼 넓은 FirstName+LastName.

내가 설정한 모든 요소들 수 있습니다:HorizontalAlignment=하고 있습니다.

내가 원하는 배경의 ListboxItems 확장으로 사용자 뻗어 목록 상자에서 나는 원하지 않을 넣어서 절대적인 값입니다.

나는 무엇을 해야하는 것이 그렇게 배경 색상의 ListBoxItems 만들기에 오신 것을 환영합니다 ListBox?

<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" 귀하의 ListBox.는 잘 되어야 한다.다만주의 자동 완성하기 때문에 그것은 그렇게 쉬운 일 HorizontalAlignment 실수.

다른 팁

내가 발견 여기에서 다른 솔루션, 므로 둘 다 포스트...

이에서 마일스 대답:

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

이것은 나를 위해 일했다.

는 경우에 당신의 항목 ListBox, 다른 답변이 여기에 도움이되지 않습니다:항목 ItemTemplate 남아보다 넓은 ListBox.

Fix 는 나를 위해 일하던 사용하지 않 가로 스크롤 막대,이는 분명히 말한 컨테이너의 모든 항목에 남아 있을 만큼 넓은 목록 상자입니다.

따라서 결정을 얻을 수 ListBox 항목처럼 다양한 목록자는지 여부,그들은 작고 필요한 스트레칭,또는 넓은 필요 포장은 다음과 같습니다:

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

(크레딧 스크롤 막대에 대한 아이디어)

이후 국경을 사용한 시각적 모양을 넣을 수 있으로 ListBoxItem 의 테마 리소와 속성을 수정할 수 있다.에 ItemTemplate,배치할 수 있습니다만 StackPanel 및 TextBlock.이 방법,코드에 상태로 유지되기도 깨끗한로서의 모습을 통해 제어 테마 리소과 데이터를 표시할 것입 통 DataTemplate.

에 대한 수정이었을 설정하는 시설 HorizontalAlignment="Stretch"ItemsPresenterScrollViewer..

이 사람이...

<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