XAML 工具提示被剪裁
我正在尝试制作一个 WPF 应用程序(常规 Windows 应用程序,而不是 XBAP 或 Silverlight)。 我希望主应用程序窗口支持透明度,并通过下面的桌面显示。
但是,当我在按钮上指定工具提示文本时,工具提示出现在主窗口下方(z 顺序)!
我有一个屏幕截图,其中: * 另一个应用程序重叠并遮挡了部分透明的主窗口的视图。 * 我的按钮的工具提示出现在其他应用程序的前面。 * 如果工具提示不在其他应用程序的前面,则它位于部分透明度的后面。
我在其他地方读到这是 32 位 XP 的 WPF 引擎的一个已知问题,在 Vista 中不会发生。
我正在寻找的是修复/解决方法。
I am trying to make a WPF app (regular Windows app, not XBAP or Silverlight).
I want the main app window to support transparency, and show through the desktop below.
But when I specify ToolTip text on a Button, the ToolTip appears beneath (z-order) the main window!
I have a screenshot where:
* Another app overlapps and blocks view of the partially transparent main window.
* The tooltip from my button appears in front of the other app.
* Where the tooltip is not in front of the other app, it is behind the partial transparency.
I read elsewhere that this is a known problem with the WPF engine for 32-bit XP and does not occur in Vista.
What I am looking for is a fix/workaround.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好的-这是我发现的解决方法:
当窗口也设为最顶层时,工具提示的问题就会消失。
但我不希望我的窗口位于最上面,所以我只在我的窗口具有键盘焦点时才执行此操作:
然后,仅当我的窗口位于最上面时,我才使用绑定来启用每个工具提示:
这会关闭工具提示,除非它工作正常。
当我的窗口没有聚焦时,实际上并不需要工具提示。
现在唯一烦人的事情是,必须在定义工具提示的每个元素上完成开/关绑定。
Ok- here's what I found as a workaround:
The problem with ToolTips goes away when the window is also made TopMost.
But I don't want my window to be topmost, so I only do it when my window has keyboard focus:
Then I use a binding to enable each ToolTip only when my window is Topmost:
This turns off the ToolTip except when it works right.
Don't really need tooltips when my window isn't in focus anyway.
Only annoying thing now is that the on/off binding has to be done on every element that defines a Tooltip.
这是 WIndows XP 和 WPF 的已知问题(例如,请参见 Connect 上的 )。
您可以通过不使用分层窗口(使用带有框架的窗口)来避免此问题。 我认为另一个解决方案是设置整个窗口 TopMost=true,但对我来说,这不是一个很好的解决方案,我对此也不确定。
我不知道MS是否正在解决这个问题,因为我认为它在XP的图形层中相当深。
This is a know problem of WIndows XP and WPF (e.g. see here on Connect).
You can avoid the problem by not using a layered window (use one with a frame). I think another solution would be to set the whole window TopMost=true, but for me, that's not a very good solution and I'm not sure about that.
I don't know if MS is tackling this issue, because I think it's quite deep in the graphic layer of XP.
在您想要位于顶部的 UIElement 上尝试 .SetValue(Canvas.ZIndex, 100) 方法。 (我用了100,只是为了将元素强制到顶部)
Try the .SetValue(Canvas.ZIndex, 100) method on the UIElement you want on top. (I used 100, only to force the element to the top)