【问题标题】:WPF: Canvas Z-Index BugWPF:画布 Z 索引错误
【发布时间】:2009-04-13 03:42:28
【问题描述】:

所以我在 WPF 中制作了自己的轮播控件。我偶然发现了一个错误,想知道是否有人知道我可以如何解决这个问题,比如方法调用或一系列方法调用或一些变通方法。这是我的轮播的打印屏幕:

Carousel Image http://img4.imageshack.us/img4/9599/carousele.jpg

您可以通过这张图片清楚地看到,我的鼠标指针位于上面写有 16 的按钮上方。但是上面写着 18 的按钮是蓝色的,就好像我的鼠标在那个按钮上一样。我还将工具提示设置为绑定到内容,工具提示说我的鼠标悬停在按钮上,有 18 个。这应该是正确的行为,因为 18 是按钮的 z-index 值。因此,上面有 18 的按钮应该在上面有 16 的按钮的顶部。然而,WPF 并没有以这种方式渲染画布,我想知道如何克服这个问题。我尝试了 canvas.InvalidateArranage()、canvas.invalidateVisual()、canvas.UpdateLayout(),但我没有运气。画布的左侧显示了它应该是什么样子,但即使 z-index 值正确,右侧也无法产生相同的结果,甚至这个屏幕截图也证明了我的观点,这是 WPF 中的一个错误。

【问题讨论】:

  • 你能提供一些源代码吗?它可能是 WPF 或您的代码中的错误。没有代码,只是道听途说。
  • 我可以为你生成源代码,但它本身就是整个控件,因为 z-index 的东西并不都在一个位置。
  • 同意。这里不够继续。请添加一些代码。
  • 你能只发布与轮播项目控件相关的事件处理程序吗?
  • 我认为处理鼠标悬停 18 的事件处理程序会将其移动到轮播的顶部,但是,项目 14 位于顶部,这让人怀疑是否没有几个其他问题也是如此。我认为要得到这个问题的明确答案,您将不得不发布一些事件处理源。

标签: c# wpf canvas z-index


【解决方案1】:

在 wpf 中,从技术上讲,您的鼠标已超过 18。事件(可能)被触发的方式如下:

我已超过“16”,请在 16 时调用鼠标悬停 我已经过“18”了,请在 18 岁时调用鼠标悬停

因为 18 是最近调用的,所以它被选中(再次,只是我的猜测)。

在 mousemove 事件的事件参数中(我假设 mousemove),确保设置 e.Handled = true,这样它只处理一次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多