XAML 工具提示被剪裁

发布于 2024-07-27 22:41:51 字数 360 浏览 9 评论 0原文

我正在尝试制作一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

后eg是否自 2024-08-03 22:42:00

好的-这是我发现的解决方法:

当窗口也设为最顶层时,工具提示的问题就会消失。

但我不希望我的窗口位于最上面,所以我只在我的窗口具有键盘焦点时才执行此操作:

private void Window_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    this.Topmost = true;
}

private void Window_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    this.Topmost = false;
}

然后,仅当我的窗口位于最上面时,我才使用绑定来启用每个工具提示:

ToolTipService="{Binding ElementName=MainWindow, Path=Topmost}"

这会关闭工具提示,除非它工作正常。
当我的窗口没有聚焦时,实际上并不需要工具提示。

现在唯一烦人的事情是,必须在定义工具提示的每个元素上完成开/关绑定。

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:

private void Window_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    this.Topmost = true;
}

private void Window_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    this.Topmost = false;
}

Then I use a binding to enable each ToolTip only when my window is Topmost:

ToolTipService="{Binding ElementName=MainWindow, Path=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.

南冥有猫 2024-08-03 22:41:58

这是 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.

云归处 2024-08-03 22:41:56

在您想要位于顶部的 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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文