C# 鼠标悬停时如何从listviewitem中删除奇怪的边框

C# 鼠标悬停时如何从listviewitem中删除奇怪的边框,c#,wpf,C#,Wpf,我有一个带有列表视图项的列表视图。我将样式触发器设置为覆盖IsMouseOver 模板化ListViewItem模板,然后将其边框厚度设置为0: <ControlTemplate x:Key="ListViewItemControlTemplate" TargetType="{x:Type ListViewItem}"> <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThic

我有一个带有
列表视图项的
列表视图
。我将样式触发器设置为覆盖
IsMouseOver


模板化ListViewItem模板,然后将其边框厚度设置为0:

<ControlTemplate x:Key="ListViewItemControlTemplate" TargetType="{x:Type ListViewItem}">
    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#1F26A0DA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#A826A0DA"/>
        </MultiTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="Selector.IsSelectionActive" Value="False"/>
                <Condition Property="IsSelected" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#3DDADADA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/>
        </MultiTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="Selector.IsSelectionActive" Value="True"/>
                <Condition Property="IsSelected" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
        </MultiTrigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

您还需要在ListViewItem样式中设置此模板:

<Setter Property="Template" Value="{StaticResource ListViewItemControlTemplate}" />

模板取出ListViewItem模板,然后将其边框厚度设置为0:

<ControlTemplate x:Key="ListViewItemControlTemplate" TargetType="{x:Type ListViewItem}">
    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#1F26A0DA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#A826A0DA"/>
        </MultiTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="Selector.IsSelectionActive" Value="False"/>
                <Condition Property="IsSelected" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#3DDADADA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/>
        </MultiTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="Selector.IsSelectionActive" Value="True"/>
                <Condition Property="IsSelected" Value="True"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/>
            <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
        </MultiTrigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

您还需要在ListViewItem样式中设置此模板:

<Setter Property="Template" Value="{StaticResource ListViewItemControlTemplate}" />



它仅在鼠标悬停时出现?是的,仅在鼠标悬停时出现。很奇怪。我试图添加更多的带有边距、填充等的设置器,但没有任何效果。在声明ListViewItem时您要设置哪些属性?谢谢@Cfun,请查看我编辑的op,它现在包含了整个xaml代码。谢谢它只在鼠标结束时出现?是的,只在鼠标结束时出现。很奇怪。我试图添加更多的带有边距、填充等的设置器,但没有任何效果。在声明ListViewItem时您要设置哪些属性?谢谢@Cfun,请查看我编辑的op,它现在包含了整个xaml代码。谢谢奇怪,我的绑定不再工作,复选框消失。您必须覆盖ContentTemplate。尝试用
替换ControlTemplate中的ContentPresenter标记。相同的行为:所有列项都消失并替换为namespace.mylist。其中mylist是我在itemssource绑定中使用的列表。这里相同,所有绑定都消失了。奇怪的是,列和绑定对我来说仍然很好。我唯一能建议的另一件事是自己生成模板,而不是使用我提供的模板。转到控件的属性,转到Miscellaneous->Template,单击控件右侧的小方框并选择“转换为新资源”。如果绑定和列等都正常,则可以改为编辑该模板中的边框。奇怪的是,我的绑定不再工作,复选框消失。您必须覆盖ContentTemplate。尝试用
替换ControlTemplate中的ContentPresenter标记。相同的行为:所有列项都消失并替换为namespace.mylist。其中mylist是我在itemssource绑定中使用的列表。这里相同,所有绑定都消失了。奇怪的是,列和绑定对我来说仍然很好。我唯一能建议的另一件事是自己生成模板,而不是使用我提供的模板。转到控件的属性,转到Miscellaneous->Template,单击控件右侧的小方框并选择“转换为新资源”。如果绑定和列等都正常,则可以在该模板中编辑边框。