Visual Studio中ListView ItemTemplate无法正常显示文本问题排查
问题原因及解决办法
你的ListView只定义了ItemTemplate(数据项的UI模板),但没有提供任何数据项——ItemTemplate是用来渲染每一条数据的UI样式,没有数据的话,模板根本不会被实例化,自然看不到"hello"文本。
当你在</ListView.ItemTemplate>和</ListView>之间添加其他控件时,相当于手动给ListView的Items集合添加了元素,此时ListView有了数据项,就会用你定义的ItemTemplate去渲染这些项,所以能看到TextBlock内容。
解决方法1:手动添加数据项
直接在ListView标签内添加数据项(因为你的模板Text是硬编码的"hello",可以直接加空的ListViewItem):
<ListView BorderBrush="White" BorderThickness="1" Height="266" Width="585" Canvas.Left="33" Canvas.Top="89" HorizontalAlignment="Center" VerticalAlignment="Top" SelectionMode="None"> <ListView.ItemTemplate> <DataTemplate> <Border Width="103"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Width="200" HorizontalAlignment="Stretch" x:Name="firstRowTextBlock" Text="hello" FontSize="14" Foreground="White"/> </Grid> </Border> </DataTemplate> </ListView.ItemTemplate> <!-- 添加数据项,数量按需调整 --> <ListViewItem/> <ListViewItem/> </ListView>
解决方法2:绑定数据源(更适合实际项目)
如果是WPF/UWP项目,推荐通过绑定数据源的方式给ListView提供数据,示例如下:
后台C#代码
using System.Collections.ObjectModel; using System.Windows; public partial class MainWindow : Window { // 定义数据源集合 public ObservableCollection<string> ItemList { get; set; } public MainWindow() { InitializeComponent(); // 填充数据 ItemList = new ObservableCollection<string> { "数据项1", "数据项2", "数据项3" }; // 设置数据上下文 DataContext = this; } }
修改后的XAML代码
<ListView BorderBrush="White" BorderThickness="1" Height="266" Width="585" Canvas.Left="33" Canvas.Top="89" HorizontalAlignment="Center" VerticalAlignment="Top" SelectionMode="None" ItemsSource="{Binding ItemList}"> <ListView.ItemTemplate> <DataTemplate> <Border Width="103"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Width="200" HorizontalAlignment="Stretch" x:Name="firstRowTextBlock" Text="hello" FontSize="14" Foreground="White"/> </Grid> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView>
注:如果需要显示数据源中的内容,可将TextBlock的Text="hello"改为Text="{Binding}",这样会直接显示ItemList中的字符串内容。
内容的提问来源于stack exchange,提问作者user22981109
相关产品推荐
相关产品推荐

