2017-09-05 6 views
0

Ich habe eine benutzerdefinierte ListBox mit jedem durch Trennzeichen getrennten Element erstellt. Ich sah ein komisches Problem. Die Dicke des Separators war nicht konstant über Listenelemente. Dann habe ich UseLayoutRounding Attribut nach dem Vorschlag von stackoverflow verwendet. Aber jetzt sehe ich ein anderes Problem. Separatoren werden in einigen Maschinen nicht angezeigt. Ich meine, Separatoren werden in manchen Maschinen angezeigt oder nicht gezeigt.WPF-Listbox-Separatoren werden in einigen Maschinen nicht angezeigt

Unten ist der Quellcode der benutzerdefinierten 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" 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; } 
    } 
} 

Jede Hilfe wird geschätzt.

Antwort

0

A Separator ist nichts anderes als ein Border so versuchen Sie es mit diesem zu ersetzen:

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

Beachten Sie, dass die SnapsToDevicePixels Eigenschaft auf true gesetzt.

+0

Danke für die Antwort. Ich werde nach Ihren Vorschlägen überprüfen. – user3863360

Verwandte Themen