【问题标题】:Is there a way to hide a ListView in xaml?有没有办法在 xaml 中隐藏 ListView?
【发布时间】:2016-05-29 06:01:32
【问题描述】:

我有以下问题。我的 ListView 的背景是灰色的,当 ListView 为空时,您可以在窗口上看到一条小灰线。这看起来很难看,所以我想在 ListView 为空时隐藏整个 ListView 以避免这种情况。

我搜索了是否有样式属性来执行此操作,但我发现的唯一内容是如何隐藏 ListViewItem 或 ListViewHeader。有人有解决这个问题的想法,必须有一些东西。

【问题讨论】:

  • 您可以使用样式触发器,将可见性设置为折叠状态,或将列表框的高度设置为 0 像素。两者将具有相同的效果

标签: c# wpf xaml listview visibility


【解决方案1】:

创建一个Converter,当您的ItemsSource 引用的集合为空时返回Visibility.Collapsed

例如:

<ListView ItemSource="{Binding MyCollection}" Visibility="{Binding MyCollection, Converter={StaticResource EmptyCollectionConverter}}"/>

您的 IValueConverter.Convert() 实现看起来像:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{
    var coll = value as IEnumerable<object>;
    return (coll.Count() > 0) ? Visibility.Visible : Visibility.Collapsed;
}

更新:来自another answer 关于如何使用样式绑定到Collection.Count

<YourControl.Style>                     
  <Style TargetType="YourControl">
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding MyList.Count}" Value="0">
            <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
    </Style.Triggers>
  </Style>
</YourControl.Style>

【讨论】:

  • 感谢您的快速回复,这是我想做的正确事情。你认为用
  • if(coll != null) return ...
  • 您的第二个答案正是我想要的。我会将其标记为我的答案,因为它比另一个更详细。
【解决方案2】:
<ListView ItemSource="{Binding MyCollection}">
 <ListView.Style>
   <Style TargetType="ListView">
     <Style.Triggers>
       <Trigger Property="HasItems" Value="False">
         <Setter Property="Visibility" Value="Collapsed"></Setter>
       </Trigger>
     </Style.Triggers>
   </Style>
 </ListView.Style>

 ...

</ListView>

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2015-12-11
    • 2021-04-28
    • 2019-01-23
    • 2015-04-01
    • 2011-07-06
    相关资源
    最近更新 更多