簡體   English   中英

WPF ListBoxItem IsMouseOver

[英]WPF ListBoxItem IsMouseOver

我有一個 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>

您的每個項目都將包含在ListBoxItem中,這就是在每個項目之間提供 ~4 像素的原因。 它還提供突出顯示和選擇樣式。 您可以通過ListBox.ItemContainerStyle屬性設置listBoxItem的樣式。 將觸發器移動到項目容器,它應該可以按需要工作。

您可以直接在按鈕上使用DataTrigger (或嘗試在它所在的位置應用相同的RelativeSource綁定):

<Style TargetType="{x:Type Button}">
    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                 Value="True">
          <!-- ... -->
    </DataTrigger>
</Style>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM