@GISoft

Как на Wpf сделать чередующуюся прозрачность фона элементов списка?

Изучаю Wpf - столкнулся с проблемой. Поиск не помог потому как без понятия куда копать.
Идея такая: Каждый элемент списка подсвечивается разным цветом в зависимости от содержимого одного из столбцов, причем четный (нечетный) элемент списка имеет большую (меньшую) прозрачность чем нечетный (четный).

Вот моя попытка. (В этом случае , естественно, меняется прозрачность всего элемента вместе с текстом, а нужно только у фона.)
<Style x:Key="DropedItem" TargetType="ListViewItem">
            <Style.Triggers>
        	<Trigger Property="Selector.IsSelected" Value="True">
        		<Setter Property="FontWeight" Value="Bold"/>
		</Trigger>
                
		<DataTrigger Binding="{Binding [address-list]}" Value="plain-tarif">
        		<Setter Property="Background" Value="#B857DA1A" />
        		<Setter Property="Foreground" Value="#FF151515"/>
        	</DataTrigger>
      		
        	<DataTrigger Binding="{Binding [address-list]}" Value="drop-user">
        		<Setter Property="Background" Value="#B8DA1A1A" />
        		<Setter Property="Foreground" Value="White"/>
        	</DataTrigger>
                
                <DataTrigger Binding="{Binding [address-list]}" Value="admin">
                    <Setter Property="Background" Value="#B8DAAE1A" />
                    <Setter Property="Foreground" Value="#FF151515"/>
                </DataTrigger>

		<Trigger Property="ItemsControl.AlternationIndex" Value="1">
                    <Setter Property="Opacity"  Value="0.5"/>
                </Trigger>

            </Style.Triggers>            
        </Style>


Мой результат:
9b3990948669404ab9bce87ffb36335a.png

Еще пробовал MultiTrigger, но приложение вылетает без объяснения причин, видимо из-за того что DataTrigger и Trigger вместе не уживаются.
Заранее спасибо.
  • Вопрос задан
  • 2808 просмотров
Решения вопроса 1
@p1x
Боюсь, что одними тригерам не обойтись. Можно решить, переопределив ControlTemplate и перенеся тригер в него, например так:
<Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Grid>
                            <Rectangle x:Name="Background" Fill="{TemplateBinding Background}" />
                            <GridViewRowPresenter />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                                <Setter TargetName="Background" Property="Opacity"  Value="0.5"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@i_light
Backend, XAML, crossplatform
Перепишите Setter-ы в нужных местах примерно так:

<Setter Property="Background">
   <Setter.Value>
      <SolidColorBrush Color="#DAAE1A" Opacity="0.5"/>
   </Setter.Value>
</Setter>


Вообще, очень полезно иногда использовать возможности синтаксиса XAML, которые по наследству перешли от XML :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы