Несколько месяцев назад в приложении на C # я начал использовать ListBox в качестве контейнера для некоторых пользовательских панелей. Когда панель была выбрана, она была выделена, как и любой элемент списка. Я нашел следующий XAML, который я смог добавить, чтобы дать всем элементам прозрачный фон (не уверен, где я изначально нашел это, или я бы связал его)
<Application.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="border" Background="Transparent">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="border" Property="Background">
<Setter.Value>Transparent</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
Это работало нормально, но теперь мне иногда нужно иметь цвет фона вместо прозрачного фона. Существует только 1 список и содержимое меняется, поэтому я хочу программно изменить стиль в коде позади.
Я нашел примеры изменения стиля в коде, но я не смог создать два одинаковых стиля. Я дал ему ax: name = "transparentListbox", скопировал его, а другой дал x: name = "normalListbox" с фоном Blue, но я получаю исключение синтаксического анализа XML, имеющее два элемента стиля, возможно, потому что они оба обычно пытается изменить каждый список.
Как я могу иметь два именованных стиля, которые выполняют одно и то же (изменение фона при выборе элемента), с которыми я могу переключаться в коде по мере необходимости?
Edit:
В каждом случае мой список используется для хранения пользовательских панелей. Я добавляю их в список с помощью lstPanels.Items.Add (p), где p - это экземпляр класса, производного от UserPanel.
Когда я впервые сделал приложение, было несколько окон, поэтому окна, которые требовали прозрачности, имели этот стиль, а те, которые требовали выбора элементов, - нет. Управление несколькими окнами стало трудоемким, поэтому оно было повторно преобразовано в одно окно, и при смене режима список будет очищен и загружен различными типами панелей. Некоторым по-прежнему требовался прозрачный фон, а теперь - нет.
Программное назначение именованного стиля для списка в целом, когда режим меняется, будет в порядке. Присвоение стиля каждому ListBoxItem повлечет за собой обновления большого количества кода по мере распространения этой функциональности.
Возможно, решение будет состоять в том, чтобы поддерживать единый стиль, но нужно ли свойство background быть привязанным к varaible, если это вообще возможно?