3

私は ListBox を持っています。マウスをアイテムの上に置くと、そのアイテムの削除ボタンが表示されます。問題は、IsMouseOver が強調表示された項目に約 4 ピクセルをトリガーすることです。そのため、複数の項目にマウスを合わせると、削除ボタンが上下に移動するように見えるのではなく、項目間のギャップでちらつきます。IsMouseOver をアイテム全体に応答させる方法はありますか?

<ListBox Name="lstLength" ItemsSource="{Binding Source={StaticResource lengths}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel LastChildFill="True" Height="22">
                <Button DockPanel.Dock="Right" Name="btnDelete" Content="X" Tag="{Binding}" Click="DeleteLength" Visibility="Collapsed" />
                <TextBlock Text="{Binding}" />
            </DockPanel>

            <DataTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="btnDelete" Property="Visibility" Value="Visible" />
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

2 に答える 2

1

各アイテムは 内に含まれますListBoxItem。これにより、各アイテム間に最大 4 ピクセルが与えられます。また、ハイライトと選択スタイルも提供します。ListBox.ItemContainerStyleプロパティlistBoxItemを介してスタイルを設定できます。トリガーをアイテム コンテナーに移動すると、必要に応じて動作するはずです。

于 2011-08-16T11:12:14.467 に答える
1

DataTriggerボタンに直接a を使用できます (またはRelativeSource、ある場所に同じバインディングを適用してみてください)。

<Style TargetType="{x:Type Button}">
    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                 Value="True">
          <!-- ... -->
    </DataTrigger>
</Style>
于 2011-08-16T11:34:34.817 に答える