【问题标题】:WPF - hiding listbox itemsWPF - 隐藏列表框项目
【发布时间】:2011-06-09 12:04:06
【问题描述】:

我有一个列表框,其中 itemtemplate 使用了一种样式。样式使用数据触发器指定边框,根据属性将边框的可见性设置为折叠。这工作正常,除了我仍然可以看到列表中每个项目的折叠线非常窄。我希望有人可以帮助如何设置可见性,以便没有可见的痕迹,因为这在连续项目折叠时非常明显。

数据模板指定了一个外部边框,其中有一个停靠面板 - 然后堆栈面板停靠在此。

感谢任何帮助。

嗯,这是一个简化的模板:

<DataTemplate x:Key="myTemplate">
    <Border BorderThickness="0">
        <Border.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsActive}" Value="False">
                        <Setter Property="Border.Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <DockPanel LastChildFill="True" HorizontalAlignment="Stretch">
            <StackPanel DockPanel.Dock="Right" HorizontalAlignment="Right"  >
                <TextBlock Text="{Binding Path=SeqNo, Converter={StaticResource SeqToTextConv}}"/>
                <Label Content="..." />
            </StackPanel>
        </DockPanel>
    </Border>
</DataTemplate>

【问题讨论】:

  • 您能发布一些说明问题的示例 XAML 吗?
  • 添加到原帖

标签: wpf listbox visibility


【解决方案1】:

您已成功隐藏您的项目,但是,ListBox 将您的每个项目包装在一个 ListBoxItem 中,这为您的项目添加了诸如选择之类的概念。我怀疑在您的项目被隐藏的情况下,您仍然会看到 ListBoxItem。您可以使用 ItemContainerStyle 来隐藏 ListBoxItems ...

<ListBox>
  <ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding IsActive}" Value="False">
          <Setter Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

【讨论】:

  • 谢谢科林,非常感谢!
【解决方案2】:

这也可以通过仅使用ListBoxItem 而不是其他控件填充ListBox.Items 来实现:

ListBox.Items.Add(new ListBoxItem { 
    Content = new CheckBox {Content = "item 1"} 
    })

<ListBox>
    <ListBox.Items>
        <ListBoxItem>
            <CheckBox Content="item 1"/>
        </ListBoxItem>
    </ListBox.Items>
</ListBox>

然后在后面的代码中或者在触发器中,就可以直接隐藏item了:

ListBox.Items[0].Visibility = Visibility.Collapse

这将隐藏项目以及 4px 边框。此方法可让您控制每个项目的可见性。

【讨论】:

    【解决方案3】:

    我选择了 ColinE 提出的解决方案。为了大家的方便,这里是一个完整的片段。谢谢 ColienE。

          <ListBox ItemsSource="{Binding Properties}" Height="110">
                <ListBox.ItemTemplate>
                    <HierarchicalDataTemplate>
                        <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}" Visibility="{Binding Visible}" />
                    </HierarchicalDataTemplate>
                </ListBox.ItemTemplate>
                <ListBox.ItemContainerStyle>
                    <Style TargetType="{x:Type ListBoxItem}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Visible}" Value="Collapsed">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ListBox.ItemContainerStyle>
          </ListBox>
    

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2016-04-02
      相关资源
      最近更新 更多