WPF ListBoxItem MouseOver边框更改

时间:2015-04-17 10:07:28

标签: wpf xaml listbox

我正在与WPF中的样式ListBox控件作斗争。

如果我的鼠标位于ListBoxItem上,我想更改item的BorderBrush属性。

我的ListBox是自定义控件的一部分,但这里有一些代码:

<ListBox x:Name="suggestionListBox"
            SelectionChanged="suggestionListBox_SelectionChanged"
            MouseUp="SuggestionListBox_OnMouseDown"
            Background="{Binding ElementName=Control, Path=Background}"
            ItemTemplate="{Binding ItemTemplate, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:AutoCompleteComboBox}}}"
            Width="{Binding ElementName=Control, Path=ActualWidth}"
            HorizontalContentAlignment="Stretch">


    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Margin" Value="0" />
            <Setter Property="Padding" Value="0" />
            <Setter Property="BorderThickness" Value="1"></Setter>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="BorderBrush" Value="Yellow" />
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="Green" />
                </Trigger>
            </Style.Triggers>


        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

我正在添加像这样的ItemTemplate:

<DataTemplate>

        <StackPanel>
            <Label Content="{Binding FullName}" />
        </StackPanel>

</DataTemplate>

基本上,ListBoxItem中有边框,我无法访问,当IsMouseOver设置为true时会更改。

当鼠标结束时,如何更改该边框的颜色?

3 个答案:

答案 0 :(得分:4)

试试这个

<Border Name="ListboxBorderr" Grid.Column="1" CornerRadius="0,3,3,0">
  <Border.Style> 
    <Style> 
      <Setter Property="Border.Background" Value="Blue"/>

      <Style.Triggers> 
        <Trigger Property="Border.IsMouseOver" Value="True"> 
          <Setter Property="Border.Background" Value="Green" />
        </Trigger> 
      </Style.Triggers> 
    </Style> 
  </Border.Style> 
</Border>

答案 1 :(得分:0)

您可以尝试为ListBox设置System.Colors并覆盖现有默认值(如HighlightBrushColor),或者,如果使用VisualStudio,请右键单击ListBox - &gt;编辑模板 - &gt;编辑副本并根据您的需要修改此模板。特别是当您想要为ListBox添加更多自定义行为时。

答案 2 :(得分:0)

感谢Jayasri,我来到了这里:

<DataTemplate>
    <Border CornerRadius="0,3,3,0">
        <Border.Style>
            <Style TargetType="Border">
                <Setter Property="Border.Background" Value="#0093DD"/>
                <Style.Triggers>
                    <Trigger Property="Border.IsMouseOver" Value="True">
                        <Setter Property="Border.Background" Value="#70116b" />
                        <Setter Property="Label.Foreground" Value="White" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Border.Style>

    <StackPanel>
            <Label Content="{Binding FullName}" >
                <Label.Style>
                    <Style TargetType="Label">
                        <Style.Triggers>
                            <Trigger Property="Border.IsMouseOver" Value="True">
                                <Setter Property="Foreground" Value="White"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Label.Style>
                </Label>
        </StackPanel>
    </Border>
</DataTemplate>