具有悬停效果的ListBox,项目之间的空间和无填充

时间:2013-10-31 15:08:40

标签: c# wpf listbox hover

目前我有这个视觉效果:

enter image description here

我希望悬停效果与我的边框相匹配,并且项目之间有空格。

  <ListBox Grid.Column="1" Grid.Row="0" Margin="5,0,0,0"  Grid.RowSpan="2"  ItemsSource="{Binding Programme.Versions, UpdateSourceTrigger=PropertyChanged}" MouseLeftButtonUp="ChangerVersion_MouseLeftButtonUp" Style="{StaticResource NoBorder}">
        <!--<ListBox.ItemsPanel>
            <ItemsPanelTemplate >
                <WrapPanel IsItemsHost="True" Orientation="Vertical"  />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel> -->
        <ListBox.ItemContainerStyle >
            <Style TargetType="ListBoxItem">
                <!--<Setter Property="Margin" Value="0,0,0,2"/>
                <Setter Property="Padding" Value="0"/>
                <Setter Property="Cursor" Value="Hand"/>-->
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate DataType="bOs:VersionBO" >
                <Border Padding="0" BorderThickness="1" BorderBrush="{DynamicResource Accent}" >
                    <Grid Cursor="Hand">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="7"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Rectangle Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Fill="{DynamicResource Accent}" />
                        <TextBlock Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Background="{DynamicResource Accent}"  Foreground="White" Margin="5"  FontSize="18">
                            <TextBlock.Text>
                                <MultiBinding StringFormat="{}V{0}.{1}">
                                    <Binding Path="Numero" />
                                    <Binding Path="NumeroModification" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                        <TextBlock Text="{Binding Description}"  Grid.Column="2" Grid.Row="0"  />
                        <Image Grid.Column="2" Grid.Row="0" Width="20" Margin="0,2,2,0"  Visibility="{Binding Interdit, Converter={StaticResource BooleanToVisibilityConverter}}" Source="../Images/Icones/interdit.png" HorizontalAlignment="Right" />
                        <TextBlock  Grid.Column="2"  Grid.Row="1">
                            <TextBlock.Text>
                                <MultiBinding Converter="{StaticResource MultiValuesWithSeparatorConverter}">
                                    <Binding Path="Langue.Libelle" />
                                    <Binding Path="SousTitre" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </Grid>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

当我重新定义ItemContainerStyle时,我失去了悬停效果。

1 个答案:

答案 0 :(得分:0)

您使用的是某些自定义主题吗?如果是这样,应用程序中的某处应该有一个默认的ListBoxItemStyle资源。

然后你的解决方案很简单:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem" BasedOn="{StaticResource ListBoxItemStyle}">
        <Setter Property="Margin" Value="0,0,0,2"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="Cursor" Value="Hand"/>
    </Style>
</ListBox.ItemContainerStyle>

如果没有,获取默认样式会稍微困难一些。我建议使用Blend。在那里,您可以右键单击设计器中的列表框,然后选择编辑模板:请记住首先从列表框中删除ItemContainerStyle

enter image description here

这将创建一个新的静态资源,您可以在其中建立模板。