【问题标题】:Mouse event on transparent background透明背景上的鼠标事件
【发布时间】:2011-12-20 22:28:29
【问题描述】:

我已经创建了几个具有透明背景的画布,并希望在其上进行一些移动事件。

但是,我发现所有鼠标事件(例如 MouseLeftButtonDown)都不能作用于画布的背景为 Null 或 Transparent。但是如果我将背景设置为某种纯色(比如红色或蓝色),鼠标事件就会正常运行。

为什么?

我可以让鼠标事件在透明背景下正常工作吗?

谢谢!

【问题讨论】:

    标签: wpf background mouseevent transparent


    【解决方案1】:

    我不知道为什么你会得到你得到的结果,但是当背景透明时它应该可以正常工作(即你通过 XAML 或代码将它显式设置为Brushes.Transparent)。如果它为 null,WPF 将不会将它包含在命中测试中,因此它不符合鼠标事件的条件。

    参见例如http://msdn.microsoft.com/en-us/library/ms752097.aspx透明的视觉对象也可以进行命中测试。

    您的元素树中很可能有另一个 UIElement 在您的画布看到鼠标事件之前捕获 and handling(即通过将 e.Handled 设置为 true

    【讨论】:

      【解决方案2】:

      Transparent 对鼠标事件有反应,这就是重点,你确定你甚至在点击画布吗?

      这是一个仅限 XAML 的示例:

        <Border Width="300" Height="300" BorderBrush="Black" BorderThickness="1">
          <Canvas Background="Transparent">
              <Canvas.Triggers>
                  <EventTrigger RoutedEvent="Canvas.MouseLeftButtonDown">
                      <BeginStoryboard>
                          <Storyboard>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background">
                                  <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Brushes.Red}"/>
                              </ObjectAnimationUsingKeyFrames>
                          </Storyboard>
                      </BeginStoryboard>
                  </EventTrigger>
              </Canvas.Triggers>
          </Canvas>
        </Border>
      

      如果您将Background 设置为null,无论是显式地还是隐式地移除该属性,它都不会再做出反应。

      【讨论】:

        【解决方案3】:

        请注意,将背景设置为透明与不设置(或将其设置为空)不同。我的经验是命中测试适用于透明背景,但不适用于空背景。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-07
          • 1970-01-01
          • 2013-01-04
          • 1970-01-01
          • 2013-03-26
          • 1970-01-01
          • 2016-12-02
          相关资源
          最近更新 更多