WPF Listbox separator is shown with different thic

2019-05-15 08:42发布

问题:

I have created a custom ListBox with each item separated by separator. But I am seeing weird issue. The thickness of separator is not constant across List items. It changes if I change the position of list box as shown in this List Box Image.

Below is the source code of custom listbox.

    <Window x:Class="CustListBox.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:CustListBox"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:Manager x:Key="manager"/>
            <Style x:Key="LstStyle" TargetType="{x:Type ListBoxItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <StackPanel>
                                <ContentPresenter/>
                                <Separator Foreground="Gray"/>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid>
            <ListBox Name="CustListBox" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Source={StaticResource manager}, Path=UserList}" ItemContainerStyle="{Binding Source={StaticResource LstStyle}}" Margin="26,17,271,27">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                           <StackPanel>                            
                                <TextBlock Text="{Binding Path=FirstName}"/>
                                <TextBlock Text="{Binding Path=SecondName}"/>                            
                            </StackPanel>             
                    </DataTemplate>
                </ListBox.ItemTemplate>               
            </ListBox>
            <ListBox Height="278" HorizontalAlignment="Left" Margin="264,16,0,0" Name="listBox1" VerticalAlignment="Top" Width="218" ItemsSource="{Binding Source={StaticResource manager}, Path=Names}" ItemContainerStyle="{Binding Source={StaticResource LstStyle}}"/>
        </Grid>
    </Window>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace CustListBox
    {
        class Manager : PropertyChangeNotifier
        {
            public List<UserDetails> UserList { get; set; }
            private int myVar;

            public int MyProperty
            {
                get { return myVar; }
                set { myVar = value; }
            }

            public List<string> Names { get; set; }

            public Manager()
            {
                UserList = new List<UserDetails>(5);
                Names = new List<string>();

                UserDetails usrDtls = new UserDetails();
                usrDtls.FirstName = "First Name";
                usrDtls.SecondName = "Second Name";

                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);
                UserList.Add(usrDtls);

                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
                Names.Add("Test Name");
            }
        }
    }
namespace CustListBox
{
    class UserDetails
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
    }
}

Any help will be appreciated.