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

时间:2010-03-15 12:06:49

标签: wpf data-binding listbox styling

任何人都可以建议显示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 个答案:

答案 0 :(得分:27)

代码中的问题是,在文本块中设置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>

可见性的设置都在样式中并且有效(至少在我的演示项目中)。