WPF-Listbox-Schaltfläche in ItemTemplate auf MouseOver


Answers

Dieser Style macht was Sie brauchen. Beim ListBoxItem wird die Schaltfläche nur sichtbar, wenn sich der Mauszeiger über dem ListBoxItem . Der besondere Trick besteht darin, an das TemplatedParent zu binden, um IsMouseOver und TargetName auf dem Setter zu verwenden, um nur den Button .

<Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border BorderBrush="Black"
                        BorderThickness="1"
                        Margin="6">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="{Binding Path=FullPath}"
                               Height="150"
                               Width="150" />
                        <Button x:Name="sideButton"
                                Width="20"
                                Visibility="Hidden" />
                    </StackPanel>
                </Border>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource TemplatedParent}}"
                                 Value="True">
                        <Setter Property="Visibility"
                                TargetName="sideButton"
                                Value="Visible" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
Question

Ich habe eine Listbox mit Bild und eine Schaltfläche. Standardmäßig ist die Schaltfläche ausgeblendet. Ich möchte die Schaltfläche sichtbar machen, wenn ich mit der Maus über einen Eintrag in der Listbox gehe. Das XAML, das ich verwende, ist unten. Vielen Dank

<Window.Resources>
        <Style TargetType="{x:Type ListBox}">
    <Setter Property="ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Border BorderBrush="Black" BorderThickness="1" Margin="6">
                                <StackPanel Orientation="Horizontal">
                                    <Image Source="{Binding Path=FullPath}" Height="150" Width="150"/>
                                    <Button x:Name="sideButton" Width="20" Visibility="Hidden"/>
                                </StackPanel>
                            </Border>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
        </Style>
    </Window.Resources>



Eine Lösung, um herauszufinden, auf welches Element geklickt wurde, besteht darin, den folgenden Ereignissetzer hinzuzufügen:

XAML

C # void ListBoxItem_MouseEnter (Objektsender, MouseEventArgs e) {_memberVar = (Absender als ListBoxItem) .Content; }




Links



Tags

wpf   listbox