Задать элементы списка для увеличения до ширины содержащего ListView - WPF - PullRequest
2 голосов
/ 28 июля 2010

Я бы хотел, чтобы элементы моего ListView росли и занимали всю ширину доступного пространства в пределах ListView.

В настоящее время ширина элемента установлена ​​следующим образом (ListView называется listView):

Width="{Binding ActualWidth, ElementName=listView, Mode=OneWay}"

Предметы будут занимать ширину ListView. Однако вертикальная полоса прокрутки не учитывается. Если полоса прокрутки присутствует, она рисуется в верхней части правого края элементов.

Можно ли это исправить?

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Я решил это, ссылаясь на ItemsPresenter напрямую. Для этого мне нужно было определить шаблон для Viewbox и назвать ItemsPresenter.

Шаблон выглядит так:

<ListView.Template>
    <ControlTemplate TargetType="{x:Type ListView}">
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true">
            <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}">
                <ItemsPresenter x:Name="MLVItemsPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
            </ScrollViewer>
        </Border>
       <--SNIP-->
    </ControlTemplate>
</ListView.Template>

А ширина привязки выглядит так:

Width="{Binding ActualWidth, ElementName=MLVItemsPresenter, Mode=OneWay}"
1 голос
/ 28 июля 2010

Просто идея, но что если вы удалили все настройки wWidth?

Когда я использую:

    <ListView DockPanel.Dock="Top">
        <ListViewItem Background="Orange">aaa</ListViewItem>
        <ListViewItem>aaa</ListViewItem>            
    </ListView>

оранжевый элемент охватывает всю ширину ListView ...

0 голосов
/ 28 июля 2010

ActualWidth включает в себя полосу прокрутки, поэтому я не думаю, что будет способ исправить это. Как насчет использования ViewBox?

...