我创建了一个自定义ListBox,每个项目用分隔符分隔。我看到一个奇怪的问题。在List项目中,分隔符的厚度不是恒定的。然后我在stackoverflow的建议后使用了 UseLayoutRounding 属性。但现在我看到了另一个问题。某些机器中未显示分隔符。我的意思是,在某些机器上显示或不显示分隔符。
以下是自定义列表框的源代码。
<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; }
}
}
任何帮助将不胜感激。
答案 0 :(得分:0)
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
。