在StackPanel WPF中使用MouseOver

时间:2015-02-09 09:09:30

标签: c# wpf mvvm wpf-controls

我刚开始学习WPF并试图在StackPanel期间隐藏MouseOver。下面是我使用的代码。当鼠标放在它上面时,我只能看到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:

<StackPanel Style="{StaticResource myStyle}">

// Child controls

</StackPanel>

2 个答案:

答案 0 :(得分:4)

当隐藏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>

答案 1 :(得分:2)

Clemens已经回答了你的问题,但只是当你触发布尔值时,你不需要触发两个状态。只需为 true false 状态设置一个触发器,然后当状态不再适用时,触发器中的setter更改的属性将恢复为之前的状态值。这将减少您需要编写的XAML数量。