2015-02-09 126 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