WPF-ocultando elementos del cuadro de lista
listbox visibility (2)
Tengo un cuadro de lista donde el elemento está usando un estilo. Los estilos especifican un borde con un disparador de datos que configura la visibilidad del borde para que se contraiga en función de una propiedad. Esto funciona bien, excepto que todavía puedo ver una línea muy estrecha para cada elemento, en la lista, que está contraída. Esperaba que alguien pudiera ayudar a configurar la visibilidad para que no haya rastros visibles, ya que esto es bastante evidente cuando se han colapsado elementos consecutivos.
La placa de datos especifica un borde exterior con un panel de acoplamiento dentro de este - luego hay paneles de apilamiento acoplados a este.
Cualquier ayuda es apreciada.
Bueno esta es una plantilla simplificada:
<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>
Esto también se puede lograr ListBox.Items
solo con ListBoxItem
lugar de otros controles:
ListBox.Items.Add(new ListBoxItem {
Content = new CheckBox {Content = "item 1"}
})
o
<ListBox>
<ListBox.Items>
<ListBoxItem>
<CheckBox Content="item 1"/>
</ListBoxItem>
</ListBox.Items>
</ListBox>
Luego, en el código que está detrás o en el activador, puede ocultar los elementos directamente:
ListBox.Items[0].Visibility = Visibility.Collapse
Esto ocultará el elemento, así como el borde de 4px. Este método le da control de visibilidad para cada elemento individual.
Usted está ocultando su artículo con éxito, sin embargo, el ListBox envuelve cada uno de sus artículos dentro de un ListBoxItem, esto agrega conceptos como la selección a su artículo. Sospecho que todavía está viendo el ListBoxItem en el caso en el que sus elementos están ocultos. Puede usar el ItemContainerStyle para ocultar 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>