Question

I would like the items of my ListView to grow to take up the entire width of the available space within the ListView.

Currently, I have the item's width set like this (the ListView is named listView):

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

The items will take up the width of the ListView. However, the vertical scroll bar is not taken into account. If the scroll bar is present, it is drawn on top of the right edge of the items.

Is it possible to fix this?

Was it helpful?

Solution

I solved this by referencing the ItemsPresenter directly. To do this, I needed to define a template for the Viewbox and name the ItemsPresenter.

The template looks like this:

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

And the width binding looks like this:

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

OTHER TIPS

Just an idea, but what if you removed all that wWidth-setting?

When I use:

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

the orange item spans the entire width of the ListView...

ActualWidth includes the scroll bar so I don't think there will be a way to fix that. What about using a ViewBox?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top