2009-10-09 9 views
0

J'ai une zone de liste dans laquelle les éléments sont stylisés en utilisant un style ResourceDictionary qui est ensuite attaché à la propriété ItemContainerStyle. Cela donne à mes ListBoxItems un BorderThickness de disons 1.Modifier le style d'élément ListBox au moment de l'exécution

Maintenant je veux réduire les éléments individuellement, donc j'utilise Visibility.Collapsed mais pour une raison quelconque la bordure que le ItemContainerStyle a créé ne disparaît pas avec le reste de la liste élément de boîte. C'est comme si elle avait créé une couche derrière mon objet et cela reste malgré le fait que l'objet soit réduit.

Comment définir le BorderThickness de ListBoxItem (ou de cette couche supplémentaire) à 0 au moment de l'exécution?

Cordialement sk

+0

Je ne suis pas sûr de comprendre votre problème, pouvez-vous s'il vous plaît certains de votre code source? – japf

+0

Est-ce que votre article s'effondre vraiment? c'est-à-dire que la hauteur totale de l'article change-t-elle correctement? sinon, la maladie du bord n'est pas le seul problème à résoudre. –

+0

L'article ne s'effondre pas. Mais la frontière reste :( –

Répondre

-1
foreach(ListBoxItem item in listBox1.Items){ 
    item.BorderThickness = new Thickness(0); 
} 

Ceci est la réponse mais je ne recommanderais pas parce que vous ne pouvez pas annuler le style de ramener ce qui était d'origine au lieu, vous devez choisir une approche différente avec databinding sur la base de certains Etats.

+0

J'ai essayé ceci et il ne l'applique pas.Réflexion de la valeur BorderThickness montre {BorderThickness 0,0,0,0}, bien qu'il devrait être {BorderThickness 0,0,0,1} –

+0

this est totalement pas de travail, il retournera datamodel au lieu de listboxitem – ariso

0

essayer d'utiliser une commande déclenche:

<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> 

évidemment changer vos valeurs d'épaisseur de la frontière, mais cela devrait faire l'affaire (ou quelque chose de très proche de cette)

0

J'ai essayé de reproduire le problème, mais a constaté que la frontière se effondre comme prévu:

<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> 

Êtes-vous certain que le ListBoxItem est l'objet bein g replié (par opposition à l'objet UI dans le ListBoxItem)?

Questions connexes