我想知道人们如何处理没有任何项目的ListBox控件?例如,我想绑定一个搜索结果列表,但如果没有找到结果,我想显示“未找到结果”。
目前我的解决方法是,如果结果集数量= 0,则隐藏listbox并显示带有“未找到结果”消息的标签。理想情况下,我想要类似于ASP.NET数据网格EmptyTemplate解决方案的东西。
干杯
我想知道人们如何处理没有任何项目的ListBox控件?例如,我想绑定一个搜索结果列表,但如果没有找到结果,我想显示“未找到结果”。
目前我的解决方法是,如果结果集数量= 0,则隐藏listbox并显示带有“未找到结果”消息的标签。理想情况下,我想要类似于ASP.NET数据网格EmptyTemplate解决方案的东西。
干杯
我用了这段代码,取得了一些成功:
<Style TargetType="ListBox" x:Key="ListStyle" BasedOn="{StaticResource {x:Type ListBox}}">
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Items.Count}"
Value="0"
>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock>No items to display</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
参考 @Matt Hamilton 的被采纳的答案,我创建了一个变体,不需要绑定,因为它使用 ListBox
的 HasItems
属性触发空模板:
<ListBox.Style>
<Style x:Key="EmptyListStyle"
TargetType="ListBox"
BasedOn="{StaticResource {x:Type ListBox}}">
<Style.Triggers>
<!-- Use ListBox.HasItems instead of Binding -->
<Trigger Property="HasItems" Value="False">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock>No items to display</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Style>
这样可以全局使用样式,无需知道绑定到列表的属性名称。当绑定到在XAML中定义的CollectionViewSource
时,我发现它很有用。
我不了解该方法是否有任何缺点,如果您发现任何问题,请欢迎评论。
ListBoxItem
而不是 ListBox
本身。也许将 TextBlock
添加到控件模板中的 ListBoxItem
可以解决这个问题?我建议查看 WPF 参考源代码 并使用 Snoop 进行调试。 - g tTextBlock
默认为null
)。为了解决这个问题,将TextBlock
放在一个Border
中,并将其背景设置为Transparent
。这样就可以让它对鼠标再次可见。 - Mark A. Donohoe