0

我有一个列表框,其中的项目使用 ResourceDictionary 样式设置样式,然后附加到 ItemContainerStyle 属性。这使我的 ListBoxItems 的 BorderThickness 假设为 1。

现在我想单独折叠项目,所以我使用 Visibility.Collapsed 但由于某种原因,ItemContainerStyle 创建的边框不会随着列表框项目的其余部分消失。就好像它在我的项目后面创建了一个图层,尽管项目被折叠,但它仍然存在。

如何在运行时将 ListBoxItem(或这个额外图层)的 BorderThickness 设置为 0?

问候

4

3 回答 3

0

尝试使用自定义触发器:

    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Collapsed">
                <Setter Property="BorderThickness" Value="0,0,0,0"/>
            </Trigger>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="BorderThickness" Value="0,0,0,1"/>
            </Trigger>
        </Style.Triggers>
    </Style>

显然改变你的边框厚度值,但这应该可以解决问题(或非常接近这个)

于 2009-10-26T14:11:23.453 回答
0

我试图重现该问题,但发现边框确实按预期折叠:

<StackPanel>
  <StackPanel.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
    <Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
      <Setter Property="BorderBrush" Value="Black" />
      <Setter Property="BorderThickness" Value="1" />
    </Style>
  </StackPanel.Resources>

  <CheckBox x:Name="_show"
            Content="Show Item 2"
            IsChecked="True" />

  <ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}">
    <ListBoxItem Content="Item 1" />
    <ListBoxItem Content="Item 2">
      <ListBoxItem.Visibility>
        <Binding ElementName="_show"
                 Path="IsChecked"
                 Converter="{StaticResource BooleanToVisibility}" />
      </ListBoxItem.Visibility>
    </ListBoxItem>
    <ListBoxItem Content="Item 3" />
  </ListBox>
</StackPanel>

您确定 ListBoxItem 是被折叠的对象(而不是 ListBoxItem 中的 UI 对象)吗?

于 2011-02-13T16:53:29.973 回答
-1
foreach(ListBoxItem item in listBox1.Items){
   item.BorderThickness = new Thickness(0);
}

这是答案,但我不推荐,因为您不能撤消样式以恢复原始样式,而是应该根据某些状态选择一些不同的数据绑定方法。

于 2009-10-10T11:22:08.530 回答