MouseOver时删除ListboxItem的蓝色边框

时间:2013-10-02 18:13:08

标签: c# wpf xaml listbox border

当我将鼠标放在列表框中的项目上时,我一直在尝试删除蓝框,我的想法也没用了,也许你会提出任何问题。提前谢谢。enter image description here

简单的列表框

<ListBox ItemsSource="{Binding Mylist}" />

不幸的是,下面的解决方案不起作用

<ListBox ItemsSource="{Binding lista}" >
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                </Style.Resources>
            </Style>
        </ListBox.ItemContainerStyle>

    </ListBox>

enter image description here

3 个答案:

答案 0 :(得分:1)

此行为由控件模板决定。

如果您熟悉XAML,请右键单击ListBox,转到Edit Template -> Edit Copy...检查Border标记。

为了帮助您,请同时查看此链接:ListBox Styles and Templates

答案 1 :(得分:0)

出现了新问题,我获得了没有蓝色边框的列表框

 <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Left" />
        <Setter Property="VerticalContentAlignment" Value="Top" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Grid Background="{TemplateBinding Background}">
                        <ContentPresenter
                          x:Name="contentPresenter"
                          Content="{TemplateBinding Content}"
                          ContentTemplate="{TemplateBinding ContentTemplate}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          Margin="{TemplateBinding Padding}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

但是我已经像这样设置了ItemContainerStyle

 <Style TargetType="ListBoxItem" x:Key="ContainerStyle">
        <Setter Property="ContentTemplate" Value="{StaticResource not_mouseover}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="ContentTemplate" Value="{StaticResource mouseover}"/>
            </Trigger>

        </Style.Triggers>
    </Style>
    <ListBox ItemsSource="{Binding lista}" ItemContainerStyle="{StaticResource ContainerStyle}">

在这种情况下,事实证明它不起作用(我的意思是蓝色边框如前所述)。如果我将ItemTemplate设置为任何指定的DateTemplate,它可以正常工作,但这里没有。你碰巧知道为什么吗? 我整理了这个。 ListboxItem只有一种风格

<Style x:Key="item_template" TargetType="ListBoxItem">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Template" Value="{StaticResource control_mouseover}"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Template" Value="{StaticResource control_not_mouseover}"/>
            </Trigger>
        </Style.Triggers>           
    </Style>
</Window.Resources>
    <ListBox ItemsSource="{Binding lista}" ItemContainerStyle="{StaticResource item_template}"> 
    </ListBox>

并声明ControlTemplate以删除蓝色边框

<ControlTemplate x:Key="control_not_mouseover" TargetType="ListBoxItem">
        <ContentPresenter
                          Content="{TemplateBinding Content}"
                          ContentTemplate="{StaticResource not_mouseover}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          Margin="{TemplateBinding Padding}"/>
    </ControlTemplate>
    <ControlTemplate x:Key="control_mouseover" TargetType="ListBoxItem">
            <ContentPresenter
                          Content="{TemplateBinding Content}"
                          ContentTemplate="{StaticResource mouseover}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          Margin="{TemplateBinding Padding}"/>
        </ControlTemplate>

也许有人会利用这一点。

答案 2 :(得分:0)

没有x:Key的样式适用于所有TargetType控件。
例如:

 <Style TargetType="Button">
        <Setter Property="Background" Value="Green" />
 </Style>

每次设置新的Button控件时都会有效。因此,如果您插入Button而未指定如下样式:<Button/>它将具有绿色背景,如上所述。

另一方面:

 <Style TargetType="Button" x:Key="myButton">
        <Setter Property="Background" Value="Green" />
 </Style>

仅适用于指定Button模板的Style控件 即:<Button Style="{StaticResource myButton}" /> - &gt;此Button将具有绿色背景,所有其他按钮将具有默认背景颜色。

我的建议是:始终在您的样式中设置一个x:Key,以便稍后设置它们。在您的方案中,将x:Key="ContainerStyle"放在第一个代码中,然后删除稍后声明的样式。它应该工作。