【问题标题】:WPF - How to change children's style on mouseover of parentWPF - 如何在父鼠标悬停时更改子样式
【发布时间】:2013-04-15 04:57:40
【问题描述】:

我有一个StackPanel (1),里面还有另一个StackPanel (2)。

SP 2 应该被隐藏(不透明度:0),直到 SP 1 悬停。鼠标悬停应将 SP2 的样式更改为 Opacity:100。

我尝试在 StackPanel 资源中定义样式,并在其中使用触发器来定位内部面板,但我不确定我应该如何从触发器内部定位子级。

什么是简单的样式结构来做到这一点?

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    我不完全了解您需要什么,所以我发布了 2 个示例。

    为了清晰起见,颜色样本:

    1) 当我们将鼠标悬停在 sp1 sp2 上时变为绿色

    <Window x:Class="Prognoz.GP.DataCollection.TestMarkupProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Window.Resources>
        <Style x:Key="test" TargetType="StackPanel">
            <Setter Property="Background" Value="Red" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=StackPanel,AncestorLevel=1}, Path=IsMouseOver}" Value="True" >
                    <Setter Property="Background" Value="Green" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <StackPanel Width="400" Height="400" Background="Yellow">
    
            <StackPanel Width="350" Height="350" Style="{StaticResource test}"/>
        </StackPanel>
    </Grid>
    </Window>
    

    2) 当我们将鼠标悬停在 sp2 sp2 上时会变成绿色

    <Style x:Key="test" TargetType="StackPanel">
            <Setter Property="Background" Value="Red" />
            <Style.Triggers>
                <Trigger Property="StackPanel.IsMouseOver" Value="True" >
                    <Setter Property="Background" Value="Green" />
                </Trigger>
            </Style.Triggers>
    </Style>
    

    【讨论】:

    • 第一个正是我需要的。谢谢!
    • 有趣的事情:我使用了第一个示例,默认为 Property="Visibility" Value="Collapsed"。但后来我在 Designer 上看不到它:-)。
    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 2020-03-29
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多