2015-02-09 129 views
1

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

   <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> 

回答

3

当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> 
+0

谢谢。它的工作:) – Bharathi 2015-02-09 09:38:23

2

克莱门斯已经回答了你问题,但只是FYI当你在一个布尔值上触发时,你不需要触发器这两个状态。只需设置一个触发器为truefalse状态,那么当状态不再适用时,由触发器中的setter更改的属性将恢复为其先前的值。这将减少你需要编写的XAML的数量。

+0

downvoter照顾评论? – 2015-02-09 14:05:47

+0

是的,我后来意识到了。 – Bharathi 2015-02-10 06:42:22