Ivan
Ivan

Reputation: 1171

Issues with ListView in WPF

Please see the issues in attached images and let me know how to fix them if you know.

-if I have large number of items, everything looks fine -If around 6 items then I get empty space on top and bottom of the scroll bar -if 3 or less items, then I get unwanted spacing between the items

Please see the code for the list:

<!--list to hold thumbnails for each slide-->
            <Border CornerRadius="5" BorderThickness="3" BorderBrush="White"  Grid.Row="6" Grid.Column="6" Grid.ColumnSpan="10" Grid.RowSpan="27">

                <ListView  Name="Thumbnails" HorizontalContentAlignment ="Center" VerticalContentAlignment="Top" Padding="0"  Background ="#81AFD3" Grid.Row="6" Grid.Column="6" Grid.ColumnSpan="10" Grid.RowSpan="27" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionChanged="Thumbnails_SelectionChanged"  >

                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="IsSelected" Value="True"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </ListView.ItemContainerStyle>


                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid Columns="1"/>
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>

                    <ListView.Resources>

                        <!--RESOURCES FOR SCROLLBAR-->

                        <!--Control colors.-->
                        <Color x:Key="WindowColor">#FFE8EDF9</Color>
                        <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
                        <Color x:Key="ContentAreaColorDark">#FF7381F9</Color>

                        <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
                        <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
                        <Color x:Key="DisabledForegroundColor">#FF888888</Color>

                        <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
                        <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>

                        <Color x:Key="ControlLightColor">White</Color>
                        <Color x:Key="ControlMediumColor">#FF7381F9</Color>
                        <Color x:Key="ControlDarkColor">#FF211AA9</Color>

                        <Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
                        <Color x:Key="ControlPressedColor">#FF211AA9</Color>


                        <Color x:Key="GlyphColor">#FF444444</Color>
                        <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>

                        <!--Border colors-->
                        <Color x:Key="BorderLightColor">#FFCCCCCC</Color>
                        <Color x:Key="BorderMediumColor">#FF888888</Color>
                        <Color x:Key="BorderDarkColor">#FF444444</Color>

                        <Color x:Key="PressedBorderLightColor">#FF888888</Color>
                        <Color x:Key="PressedBorderDarkColor">#FF444444</Color>

                        <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
                        <Color x:Key="DisabledBorderDarkColor">#FF888888</Color>

                        <Color x:Key="DefaultBorderBrushDarkColor">Black</Color>

                        <!--Control-specific resources.-->
                        <Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
                        <Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
                        <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>

                        <Color x:Key="NavButtonFrameColor">#FF3843C4</Color>

                        <LinearGradientBrush x:Key="MenuPopupBrush"
                     EndPoint="0.5,1"
                     StartPoint="0.5,0">
                            <GradientStop Color="{DynamicResource ControlLightColor}"
                Offset="0" />
                            <GradientStop Color="{DynamicResource ControlMediumColor}"
                Offset="0.5" />
                            <GradientStop Color="{DynamicResource ControlLightColor}"
                Offset="1" />
                        </LinearGradientBrush>

                        <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
                     StartPoint="0,0"
                     EndPoint="1,0">
                            <LinearGradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="#000000FF"
                    Offset="0" />
                                    <GradientStop Color="#600000FF"
                    Offset="0.4" />
                                    <GradientStop Color="#600000FF"
                    Offset="0.6" />
                                    <GradientStop Color="#000000FF"
                    Offset="1" />
                                </GradientStopCollection>
                            </LinearGradientBrush.GradientStops>
                        </LinearGradientBrush>

                        <!--RESOURCES FOR SCROLLBAR END-->

                        <Style x:Key="ScrollBarLineButton" TargetType="{x:Type RepeatButton}">
                            <Setter Property="SnapsToDevicePixels" Value="True" />
                            <Setter Property="OverridesDefaultStyle" Value="true" />
                            <Setter Property="Focusable" Value="false" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                                        <!--HERE WE ADJUST PROPERTIES ON TOP AND BOTTOM BUTTONS -->
                                        <Border x:Name="Border"  CornerRadius="4,4,4,4" BorderThickness="0" >
                                            <Border.BorderBrush>
                                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <GradientStop Color="{DynamicResource BorderMediumColor}" Offset="0.0" />
                                                            <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>
                                            </Border.BorderBrush>
                                            <Border.Background>
                                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <!--HERE WE SET THE KEYS COLOR-->
                                                            <GradientStop Color="White"/>
                                                            <GradientStop Color="White" Offset="0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>
                                            </Border.Background>
                                            <VisualStateManager.VisualStateGroups>
                                                <VisualStateGroup x:Name="CommonStates">
                                                    <VisualState x:Name="Normal" />
                                                    <VisualState x:Name="MouseOver" />
                                                    <VisualState x:Name="Pressed">
                                                        <Storyboard>
                                                            <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
                                                                <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlPressedColor}" />
                                                            </ColorAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="Disabled">
                                                        <Storyboard>
                                                            <ColorAnimationUsingKeyFrames Storyboard.TargetName="Arrow" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)">
                                                                <EasingColorKeyFrame KeyTime="0" Value="#79B0D4" />
                                                            </ColorAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                </VisualStateGroup>
                                            </VisualStateManager.VisualStateGroups>
                                            <Path x:Name="Arrow" HorizontalAlignment="Center" VerticalAlignment="Center" Data="{Binding Content,  RelativeSource={RelativeSource TemplatedParent}}" >
                                                <Path.Fill>
                                                    <!--HERE WE SET THE ARROW COLOR-->
                                                    <SolidColorBrush Color="#79B0D4"/>
                                                </Path.Fill>
                                            </Path>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>

                        <Style x:Key="ScrollBarPageButton" TargetType="{x:Type RepeatButton}">
                            <Setter Property="SnapsToDevicePixels" Value="True" />
                            <Setter Property="OverridesDefaultStyle" Value="true" />
                            <Setter Property="IsTabStop" Value="false" />
                            <Setter Property="Focusable" Value="false" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                                        <!--HERE WE SET Background buttons PROPERTIES-->
                                        <Border Background="Black" Height="0"/>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>



                        <Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
                            <Setter Property="SnapsToDevicePixels" Value="True" />
                            <Setter Property="OverridesDefaultStyle" Value="true" />
                            <Setter Property="IsTabStop" Value="false" />
                            <Setter Property="Focusable" Value="false" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type Thumb}">
                                        <!--HERE WE SET THE THUMB COLOR CORNER AND BORDER-->
                                        <Border CornerRadius="1" Background="#D8E8F5" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Width="16" Height="250" />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>

                        <ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition MaxHeight="18" />
                                    <RowDefinition Height="0.00001*" />
                                    <RowDefinition MaxHeight="18" />
                                </Grid.RowDefinitions>
                                <!--HERE WE SET THE ENTIRE SCROLLBAR BACKROUND AND CORNERS-->
                                <Border Grid.RowSpan="3" CornerRadius="5" Background="#A9CCE5"  />
                                <RepeatButton Grid.Row="0" Style="{StaticResource ScrollBarLineButton}" Height="18" Command="ScrollBar.LineUpCommand" Content="M 0 4 L 8 4 L 4 0 Z" />
                                <Track x:Name="PART_Track" Grid.Row="1" IsDirectionReversed="true">
                                    <Track.DecreaseRepeatButton>
                                        <RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageUpCommand" />
                                    </Track.DecreaseRepeatButton>
                                    <Track.Thumb>
                                        <Thumb Style="{StaticResource ScrollBarThumb}" Margin="1,0,1,0">
                                            <Thumb.BorderBrush>

                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <GradientStop Color="{DynamicResource BorderLightColor}" Offset="0.0" />
                                                            <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>

                                            </Thumb.BorderBrush>
                                            <Thumb.Background>

                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0.0" />
                                                            <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="1.0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>

                                            </Thumb.Background>
                                        </Thumb>
                                    </Track.Thumb>
                                    <Track.IncreaseRepeatButton>
                                        <RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageDownCommand" />
                                    </Track.IncreaseRepeatButton>
                                </Track>
                                <RepeatButton Grid.Row="3" Style="{StaticResource ScrollBarLineButton}" Height="18" Command="ScrollBar.LineDownCommand" Content="M 0 0 L 4 4 L 8 0 Z" />
                            </Grid>
                        </ControlTemplate>

                        <ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition MaxWidth="18" />
                                    <ColumnDefinition Width="0.00001*" />
                                    <ColumnDefinition MaxWidth="18" />
                                </Grid.ColumnDefinitions>
                                <Border Grid.ColumnSpan="3" CornerRadius="2" Background="#F0F0F0" />
                                <RepeatButton Grid.Column="0" Style="{StaticResource ScrollBarLineButton}" Width="18" Command="ScrollBar.LineLeftCommand" Content="M 4 0 L 4 8 L 0 4 Z" />
                                <Track x:Name="PART_Track" Grid.Column="1" IsDirectionReversed="False">
                                    <Track.DecreaseRepeatButton>
                                        <RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageLeftCommand" />
                                    </Track.DecreaseRepeatButton>
                                    <Track.Thumb>
                                        <Thumb Style="{StaticResource ScrollBarThumb}" Margin="0,1,0,1">

                                            <Thumb.BorderBrush>

                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <GradientStop Color="{DynamicResource BorderLightColor}" Offset="0.0" />
                                                            <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>

                                            </Thumb.BorderBrush>
                                            <Thumb.Background>

                                                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                                    <LinearGradientBrush.GradientStops>
                                                        <GradientStopCollection>
                                                            <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0.0" />
                                                            <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="1.0" />
                                                        </GradientStopCollection>
                                                    </LinearGradientBrush.GradientStops>
                                                </LinearGradientBrush>

                                            </Thumb.Background>
                                        </Thumb>
                                    </Track.Thumb>
                                    <Track.IncreaseRepeatButton>
                                        <RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageRightCommand" />
                                    </Track.IncreaseRepeatButton>
                                </Track>
                                <RepeatButton Grid.Column="3" Style="{StaticResource ScrollBarLineButton}" Width="18" Command="ScrollBar.LineRightCommand" Content="M 0 0 L 4 4 L 0 8 Z" />
                            </Grid>
                        </ControlTemplate>

                        <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
                            <Setter Property="SnapsToDevicePixels" Value="True" />
                            <Setter Property="OverridesDefaultStyle" Value="true" />
                            <!--<Setter Property="Value" Value="20" />-->
                            <Style.Triggers>
                                <Trigger Property="Orientation" Value="Horizontal">
                                    <Setter Property="Width" Value="Auto" />
                                    <Setter Property="Height" Value="18" />
                                    <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
                                </Trigger>
                                <Trigger Property="Orientation" Value="Vertical">
                                    <Setter Property="Width"  Value="18" />
                                    <Setter Property="Height" Value="Auto" />
                                    <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>


                    </ListView.Resources>


                </ListView>

            </Border>

OK if large number of items

If around 6 items then I get empty space on top and bottom of the scroll bar

if 3 or less items, then I get unwanted spacing between the items

Upvotes: 0

Views: 139

Answers (1)

almulo
almulo

Reputation: 4978

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <UniformGrid Columns="1"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

This here is the root of your problems. The UniformGrid is using the whole available space and creating equally tall cells to fill it.

Either use a StackPanel as your Items Panel, or set VerticalAlignment="Top" to the UniformGrid.

Upvotes: 3

Related Questions