WPF列表框 - 空列表显示消息

21

有人能否建议一下最好的方法来显示一个Textblock(例如"List Empty")以便其可见性与Items.Count绑定。

我已经尝试过以下代码,但无法使其工作,因此认为我肯定做错了什么。

    <ListBox x:Name="lstItems" 
        ItemsSource="{Binding ListItems}">
    </ListBox>
    <TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" Visibility="Collapsed">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>  
                </Style.Triggers>
            </Style>                            
        </TextBlock.Style>
    </TextBlock>
1个回答

32

您的代码问题在于在文本块本身中设置Visibility值的优先级高于在样式中设置它。因此,即使触发器发生作用,触发器内部的设置也没有效果。请将XAML更改为:

  <TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" >
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
           <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>  
            </Style.Triggers>
        </Style>                            
    </TextBlock.Style>
  </TextBlock>

在样式中设置Visibility属性可以生效,至少在我的演示项目中是有效的。


谢谢,这正好解决了我的问题(也增进了我的理解:)) - David Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接