在 StackPanel WPF 中使用 MouseOver

using MouseOver in StackPanel WPF

我刚刚开始学习 WPF 并试图在 MouseOver 期间隐藏一个 StackPanel。下面是我使用的代码。当鼠标放在上面时,我只能看到 Panel 闪烁,但它并没有完全隐藏。我在这里错过了什么吗?提前致谢。

             <Style x:Key="myStyle" TargetType="{x:Type StackPanel}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Visibility" Value="Hidden" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="false">
                        <Setter Property="Visibility" Value="Visible" />
                    </Trigger>
                </Style.Triggers>
            </Style>  

堆栈面板:

<StackPanel Style="{StaticResource myStyle}">

// Child controls

</StackPanel>

隐藏 StackPanel 时,IsMouseOver 属性 切换为 false,这使 StackPanel 再次可见。

您可以设置 Opacity 属性 而不是 Visibility:

<Style x:Key="myStyle" TargetType="{x:Type StackPanel}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Opacity" Value="0" />
        </Trigger>
        <Trigger Property="IsMouseOver" Value="False">
            <Setter Property="Opacity" Value="1" />
        </Trigger>
    </Style.Triggers>
</Style>

或者,正如另一个答案中指出的那样,只为 IsMouseOver == true 声明一个触发器:

<Style x:Key="myStyle" TargetType="{x:Type StackPanel}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Opacity" Value="0" />
        </Trigger>
    </Style.Triggers>
</Style>

Clemens 已经回答了您的问题,但仅供参考,当您触发布尔值时,您不需要 both 状态的触发器。只需为 truefalse 状态设置一个触发器,然后当状态不再应用触发器中设置器更改的属性时将恢复到以前的值。这将减少您需要编写的 XAML 的数量。