Изменить стиль элемента ListBox во время выполнения - PullRequest
0 голосов
/ 09 октября 2009

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

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

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

С уважением ск

Ответы [ 3 ]

0 голосов
/ 26 октября 2009

попробуйте использовать пользовательские триггеры:

    <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 голосов
/ 13 февраля 2011

Я попытался воспроизвести проблему, но обнаружил, что граница действительно разрушается, как и ожидалось:

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

0 голосов
/ 10 октября 2009
foreach(ListBoxItem item in listBox1.Items){
   item.BorderThickness = new Thickness(0);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...