所以,您需要的是一个UserControl,它将用于显示您的ListView 中的每个项目。所以你必须按照你想要的方式设计你的用户控件;因此,如果您需要在网格内的面板中使用 TextBlock,这就是您必须做的。
<UserControl x:Class="SOWPF.MyListViewItem"
....
mc:Ignorable="d"
d:DesignHeight="48" d:DesignWidth="250">
<Grid>
<StackPanel Orientation="Horizontal" Width="250" Height="36" Margin="10" Background="PeachPuff">
<TextBlock Background="White" Width="200" Height="32" Margin="2" Text="{Binding DisplayText}"/>
</StackPanel>
</Grid>
</UserControl>
要显示数据,您必须有一个具有公共属性的类。所以我有一个带有一个公共string 属性的简单类,它将包含您要在TextBlock 中显示的文本。用户控件上的数据绑定指的是this; DisplayText 是公共字符串属性:
public class DisplayData
{
public string DisplayText { get; set; }
}
现在在您的View 中,您必须在ListView 中使用ContentControl 来动态显示您的UserControl。
<Window x:Class="SOWPF.MainWindow"
....
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ListView>
<ItemsControl ItemsSource="{Binding DisplayList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyListViewItem/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ListView>
</Grid>
</Window>
这是您的代码。我这样做是为了方便,但你真的应该使用ViewModel。
public partial class MainWindow : Window
{
public List<DisplayData> DisplayList { get; set; }
public MainWindow()
{
InitializeComponent();
DisplayList = new List<DisplayData>
{
new DisplayData() { DisplayText = "A" },
new DisplayData() { DisplayText = "B" },
new DisplayData() { DisplayText = "C" }
};
DataContext = this;
}
}
结果:
编辑(在 OP 编辑问题后)
如果您只想让文本居中,您可以去掉额外的控件,只需在您的TextBlock 中使用TextAlignment=Center。
<UserControl x:Class="SOWPF.MyListViewItem"
....
mc:Ignorable="d"
d:DesignHeight="48" d:DesignWidth="250">
<TextBlock Background="LightCoral" Width="200" Height="32" Margin="2" Text="{Binding DisplayText}"
TextAlignment="Center"/>
</UserControl>
它看起来像这样: