none
关于鼠标移动后的 MouseLeftButtonUp 事件的疑问 RRS feed

  • 问题

  • 我在做一个无边框的窗体。自己实现了一个只具有简单功能的标题栏。

    具体说来就是在窗体上放置了一个两行一列的 Grid,在这个 Grid 的第一行,我放置了一个 TextBlock,然后在 TextBlock 的 MouseMove 事件处理代码中按如下形式编码:

    if (e.LeftButton == MouseButtonState.Pressed)
    
    { 
    
     this.DragMove();
    
    }
    
    

    这样一来,当我在这个 TextBlock 控件上方按住鼠标并拖动的时候,整个无边框窗体也就跟着我的鼠标一起移动了。

    当实现这个目标后,我想添加一个效果——当在 TextBlock 上按下鼠标左键时,用0.5秒的时间使窗口的 Opacity 的值由 1 变为 0.6。当拖动完成松开鼠标左键时,用0.5秒的时间使窗口的 Opacity 的值由 0.6 变回为 1。

    我是采用为 TextBlock 添加 Trigger 的形式来实现的,代码如下:

    <TextBlock.Triggers>
    
     <EventTrigger RoutedEvent="MouseLeftButtonDown" >
    
      <BeginStoryboard>
    
       <Storyboard>
    
        <DoubleAnimation From="1" To="0.6" Duration="0:0:0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="sfWnd"/>
    
       </Storyboard>
    
      </BeginStoryboard>
    
     </EventTrigger> 
    
     <EventTrigger RoutedEvent="MouseLeftButtonUp">
    
      <BeginStoryboard>
    
       <Storyboard> 
    
        <DoubleAnimation From="0.6" To="1" Duration="0:0:0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="sfWnd"/>
    
       </Storyboard>
    
      </BeginStoryboard>
    
     </EventTrigger> 
    
    </TextBlock.Triggers>
    
    

    其中,Storyboard.TargetName="sfWnd" 语句中的 sfWnd 是我的无边框窗体的 Name。

    我现在碰到的问题是,当鼠标左键在 TextBlock 上按下并拖动时,窗体可以正常移动,同时也变得透明了。但是当我拖动完窗体并松开鼠标左键后,第二个触发器似乎名没有起作用,因为这是窗体仍然是透明的,透明度没有丝毫变化。

    而如果我只是在 TextBlock 上做:按下-->保持-->松开鼠标这个动作,并不去拖动窗体时,窗体的透明度是可以由不透明-->半透明-->不透明这样进行转换的。

    请问,这是什么原因呢?

    谢谢!

    2010年7月16日 8:06