use*_*360 5 wpf listbox listboxitem
我创建了一个自定义 ListBox,每个项目由分隔符分隔。但我看到了奇怪的问题。分隔符的粗细在列表项中不是恒定的。如果我更改列表框的位置,如此List Box Image所示,它会发生变化 。
下面是自定义列表框的源代码。
<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; }
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。