WPF: Могу ли я установить свойство IsMouseOver для ChildElement, когда родительский объект наведен на? - PullRequest
2 голосов
/ 11 ноября 2010

Предположим, у меня есть кнопка, вложенная в Template из ListBoxItem. Могу ли я установить для свойства IsMouseOver кнопки значение true, чтобы оно выглядело, как будто оно наведено поверх?

Только для иллюстрации, я имею в виду уведомления в верхней части окна. Это в основном ListBoxItem с TextBlock и Button

alt text

1 Ответ

2 голосов
/ 11 ноября 2010

К сожалению, нет. «IsMouseOver» только для чтения.

Я предполагаю, однако, что у вас есть собственный шаблон элемента управления для кнопки, верно? Если это так, то одним из обходных путей является использование свойства Tag кнопки. Добавьте триггер к ControlTemplate, который срабатывает при задании определенного значения тега. Затем в DataTemplate для ваших ListBoxItems просто установите для тега кнопки это конкретное значение, когда IsMouseOver для элемента имеет значение true. Ниже приведен пример:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel x:Name="dp" Background="Transparent">
                <Button x:Name="btn" DockPanel.Dock="Right" Content="x" Background="Gainsboro">
                    <Button.Template>
                        <ControlTemplate TargetType="Button">
                            <Border x:Name="bd" Padding="2" BorderBrush="Black" BorderThickness="1"
                                    Background="WhiteSmoke">
                                <ContentPresenter/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="bd" Property="Background" Value="LightBlue"/>
                                </Trigger>
                                <Trigger Property="Tag" Value="SimulatedMouseOver">
                                    <Setter TargetName="bd" Property="Background" Value="LightBlue"/>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Setter TargetName="bd" Property="Background" Value="Gray"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <TextBlock Text="{Binding}"/>
            </DockPanel>
            <DataTemplate.Triggers>
                <Trigger SourceName="dp" Property="IsMouseOver" Value="True">
                    <Setter TargetName="btn" Property="Tag" Value="SimulatedMouseOver"/>
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <s:String>Item1</s:String>
    <s:String>Item2</s:String>
    <s:String>Item3</s:String>
</ListBox>
...