WPF ListBoxItem样式不起作用

时间:2015-05-26 19:47:11

标签: wpf

我在ListBox的DataTemplate中有一个Border。当鼠标悬停在项目上方时,我想显示边框。这是我的XAML:

<ListBox Grid.Row="3"
            Grid.Column="0"
            ItemsSource="{Binding Devices}"
            SelectedItem="{Binding SelectedDevice}"
            MaxWidth="350">

    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
            </Style.Resources>
        </Style>
    </ListBox.Resources>

    <ListBox.ItemTemplate>
        <DataTemplate>

            <Border BorderBrush="SteelBlue"
                    BorderThickness="0"
                    HorizontalAlignment="Stretch"
                    CornerRadius="3"
                    MinHeight="65"
                    Margin="3">

                <Border.Style>
                    <Style>
                        <Style.Triggers>
                            <Trigger Property="Border.IsMouseOver" Value="True">
                                <Setter Property="Border.BorderThickness" Value="1" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>

                <Grid>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Image Grid.Row="0" 
                            Grid.RowSpan="2"
                            Grid.Column="0"
                            Source="/DFT.Falcon6.UI.Desktop;component/Media/Images/fc6logo.png"
                            Height="50"
                            Width="50"
                            Margin="5"/>
                    <TextBlock Grid.Row="0"
                                Grid.Column="1"
                                Text="{Binding UnitIdentifier}"
                                Style="{StaticResource devicetextStyle}"
                                Margin="2"/>
                    <TextBlock Grid.Row="1"
                                Grid.Column="1"
                                Text="{Binding IPAddress}"
                                Style="{StaticResource devicetextStyle}"
                                Margin="2"/>

                </Grid>

            </Border>

        </DataTemplate>
    </ListBox.ItemTemplate>

</ListBox>

你可以看到我在Border控件中定义了一个触发器,将BorderThickness设置为1.但是当我运行它并将鼠标悬停在该项目上时,没有任何反应。

我在这里做错了什么?

由于

1 个答案:

答案 0 :(得分:2)

试试这个:

<Style>
    <Setter Property="BorderThickness" Value="0" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderThickness" Value="1" />
         </Trigger>
    </Style.Triggers>
</Style>

该样式应用于Border控件,因此无需在绑定上再次指定“Border”。我发现它有时(总是?)似乎直接在控件上定义的属性将覆盖触发器的更改。您还必须从Border控件中删除borderTickness属性。

另外,在运行时请注意输出窗口。绑定错误将在应用程序中静默发生,但通常在输出窗口中显示为红色文本,有时可以帮助追踪错误。