我有一个列表框,其中包含在XAML中定义的项模板,如下所示:
<ListBox Name="listBoxDisruptions"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="0,10"> <TextBlock Text="{Binding text}" Foreground="Black" FontSize="29">Hello! some item</TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
现在我想要的是在列表框的中心显示一行文本,以防该列表框的ItemSource为空.
XAML是否支持某种无项目模板?像这样的东西:
<ListBox Name="listBoxDisruptions"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="0,10"> <TextBlock Text="{Binding text}" Foreground="Black" FontSize="29">Hello! some item</TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> <ListBox.NoItemTemplate> <TextBlock Text="No Items to display"/> </ListBox.NoItemTemplate> </ListBox>
那么?
可能有一种XAML方法可以使用类似WPF的技术–
Listbox Item Template for an empty list
但是,在Overflow7中,我无聊尝试使这些工作 – 所以我使用了一个稍微hacky的技巧,而不是添加额外的TextBlock到页面,然后使用:
private void PhoneApplicationPage_Loaded(object sender,RoutedEventArgs e) { listBox1.ItemsSource = data; data.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(data_CollectionChanged); } void data_CollectionChanged(object sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (data.Count == 0) textBlock1.Visibility = Visibility.Visible; else textBlock1.Visibility = Visibility.Collapsed; }
(Trick从http://forums.create.msdn.com/forums/p/70755/431687.aspx学到的)