2009-10-09 3 views
0

У меня есть список, в котором элементы стилизованы с использованием стиля ResourceDictionary, который затем привязан к свойству ItemContainerStyle. Это дает мне ListBoxItems BorderThickness, скажем, 1.Изменить стиль элемента ListBox во время выполнения

Теперь я хочу свернуть элементы отдельно, поэтому я использую Visibility.Collapsed, но по какой-то причине граница, созданная ItemContainerStyle, не исчезает вместе с остальной частью списка ящик. Это похоже на то, что он создал слой за моим элементом, и это остается, несмотря на то, что элемент рушится.

Как установить значение BorderThickness ListBoxItem (или этого дополнительного слоя) на 0 во время выполнения?

С уважением С.К.

+0

Я не уверен, что понял вашу проблему, не могли бы вы рассказать некоторые из ваших исходных кодов? – japf

+0

Ваш товар действительно рушится? т. е. правильно ли изменяется общая высота элемента? если нет, то ограничение границы не будет единственной проблемой для решения проблемы. –

+0

Элемент рушится. Но граница остается :( –

ответ

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

Это ответ, но я Wouldnt рекомендую, потому что вы не можете отменить стиль, чтобы вернуть то, что было оригинальным вместо этого вы должны выбрать какой-то другой подход привязки данных на основе определенных состояний.

+0

Я пробовал это, и он не применяется. Отражение значения BorderThickness показывает {BorderThickness 0,0,0,0}, хотя это должно быть {BorderThickness 0,0,0,1} –

+0

полностью не работает, он вернет datamodel вместо listboxitem – ariso

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> 

Очевидно изменить значение толщины границ, но это необходимо сделать трюк (или что-то очень близкое к этому)

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 является объектом Бейн g рухнул (в отличие от объекта UI в ListBoxItem)?

Смежные вопросы