Настроить фон для элемента WPF ListViewItem. Задать стиль/шаблон
Делаю первое приложение на WPF .Net Framework, возникла необходимость создать ListView для вывода списка "клиентов". В C# получаю список, для клиентов создан класс, поэтому с выводом контента проблем не возникло.
<Style TargetType="ListView" BasedOn="{StaticResource HomePageListView}">
<Setter Property="View">
<Setter.Value>
<GridView>
<GridViewColumn Header="Username" Width="150" DisplayMemberBinding="{Binding username}"/>
<GridViewColumn Header="Email" Width="250" DisplayMemberBinding="{Binding email}"/>
</GridView>
</Setter.Value>
</Setter>
</Style>
Но есть одно "но". Встроенные стили для ListViewItem'ов просто вырвиглазные, поэтому я решил подправить фон.
При попытке сменить цвет простым кодом:
<Style TargetType="{x:Type ListViewItem}" x:Key="HomePageListViewItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#475b63"/>
<Setter Property="BorderBrush" Value="#2e2c2f"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="#475b63"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Transparent"/>
</Trigger>
</Style.Triggers>
</Style
Получаю следующее.
Вопрос: как убрать это дурацкое разделение фона на 2 полоски и можно ли вообще? Я попробовать создать Template, однако, это не дало никаких результатов, потому что простыми ContentPresentor'ами или TextBlock'ами это не поправишь, так как у них нету триггеров "IsSelected".
Ответы (1 шт):
Вот вам простой шаблон. Подсвечивает только текущий элемент. Попутно HorizontalContentAlignment лечит неработающее выравнивание в ячейках
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border
Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<GridViewRowPresenter Margin="{TemplateBinding Padding}" Content="{TemplateBinding Content}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Gray" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>

