WPF ListBox WrapPanel: прозрачный MouseOver и SelectedItem - PullRequest
0 голосов
/ 08 октября 2018

У меня есть следующее окно со списком:

            <ListBox Grid.Row="1" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding MyItems}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel IsItemsHost="True">
                    </WrapPanel>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

Но когда я делаю мышку или выбираю элемент, элемент становится «синим».Я хочу, чтобы он был прозрачным.

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

MyItem является наблюдаемой коллекцией myItem:

public class MyItem
{
    public string Key { get; set; }
    public bool Selected{ get; set; }
}

1 Ответ

0 голосов
/ 08 октября 2018

Например, вы можете просто установить стиль по умолчанию для ListBoxItem в верхней части вашего файла xaml или в идеале внутри вашего файла ресурсов xaml.Вы должны переопределить шаблон управления по умолчанию для достижения этого.Вам не нужно устанавливать триггеры напрямую.Вот пример.Повеселись.

<Window x:Class="StackPoC.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:StackPoC"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border x:Name="border"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}">
                        <ContentPresenter VerticalAlignment="{TemplateBinding VerticalAlignment}"
                                          HorizontalAlignment="{TemplateBinding HorizontalAlignment}" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<ListBox ItemsSource="{Binding Collection}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

РЕДАКТИРОВАТЬ

Я не читал часть о подчеркивании в Выбранном *.Хорошо .. Вы уже знаете, что вам пришлось создать собственный шаблон управления, чтобы избавиться от выбора.Я не буду писать код для вас, но я дам вам представление о том, как это сделать;) Создайте триггеры внутри узла ControlTemplate.Triggers в соответствии со свойством IsSelected, а затем используйте Setter для настройки желаемого внешнего вида.Удачи.

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