我刚开始学习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>
答案 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数量。