WPF ListBox WrapPanel:MouseOver和SelectedItem透明

时间:2018-10-08 08:58:32

标签: wpf listbox

我有以下列表框:

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

但是当我将鼠标悬停或选择一个项目时,该项目为“蓝色”。 我希望它透明。

如果要选中该项目,我还希望该项目带有下划线。

MyItem是myItem的一个observableCollection:

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

1 个答案:

答案 0 :(得分:0)

例如,您可以简单地在xaml文件的顶部或理想情况下在资源xaml文件的内部设置ListBoxItem的默认样式。您必须重写默认控制模板才能实现。您不必直接设置触发器。这是例子。玩得开心。

<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>

编辑

我还没有阅读有关Selected *下划线的部分。好吧。您已经知道必须创建自定义控件模板才能摆脱选择。我不会为您编写代码,但会给您一个有关如何执行此操作的想法;)根据IsSelected属性在节点ControlTemplate.Triggers中创建触发器,然后使用Setter来设置所需的外观。祝你好运。