Разделители списка WPF не отображаются на некоторых машинах

Я создал собственный ListBox с каждым элементом, разделенным разделителем. Я видел странную проблему. Толщина разделителя не была постоянной для всех элементов списка. Затем я использовал атрибут UseLayoutRounding после предложения от stackru. Но сейчас я вижу другую проблему. Разделители не показаны на некоторых машинах. Я имею в виду, разделители либо показаны, либо не показаны на некоторых машинах.

Ниже приведен исходный код настраиваемого списка.

<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" UseLayoutRounding="True" 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; }
    }
}

Любая помощь будет оценена.

1 ответ

Separator это ничего, кроме Border так что попробуйте заменить это на это:

<Style x:Key="LstStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <StackPanel>
                    <ContentPresenter/>
                    <Border Background="Gray" 
                            Height="1" SnapsToDevicePixels="true"
                            Margin="0,2,0,2"/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Обратите внимание, что SnapsToDevicePixels свойство установлено в true,

Другие вопросы по тегам