Подсказки XAML обрезаются - PullRequest
0 голосов
/ 20 июля 2009

Я пытаюсь создать приложение WPF (обычное приложение для Windows, а не XBAP или Silverlight). Я хочу, чтобы главное окно приложения поддерживало прозрачность и отображалось на рабочем столе ниже.

Но когда я указываю текст всплывающей подсказки для кнопки, всплывающая подсказка появляется под (в z-порядке) главного окна!

У меня есть скриншот, где: * Другое приложение перекрывает и блокирует вид частично прозрачного главного окна. * Подсказка от моей кнопки появляется перед другим приложением. * Если всплывающая подсказка находится не перед другим приложением, она позади частичной прозрачности.

Я читал в другом месте, что это известная проблема с механизмом WPF для 32-битной XP и не возникает в Vista.

Я ищу исправление / обходной путь.

Ответы [ 3 ]

1 голос
/ 20 июля 2009

Попробуйте метод .SetValue (Canvas.ZIndex, 100) для элемента UIElement, который вы хотите сверху. (Я использовал 100, только чтобы заставить элемент наверх)

0 голосов
/ 22 июля 2009

Хорошо, вот что я нашел в качестве обходного пути:

Проблема с всплывающими подсказками исчезает, когда окно также становится TopMost.

Но я не хочу, чтобы мое окно было верхним, поэтому я делаю это только тогда, когда мое окно имеет фокус клавиатуры:

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

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

Затем я использую привязку, чтобы активировать каждую всплывающую подсказку, только когда у меня окно Topmost:

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

Это отключает всплывающую подсказку, кроме случаев, когда она работает правильно. На самом деле мне не нужны подсказки, когда мое окно не в фокусе.

Единственное, что сейчас раздражает, так это то, что привязка вкл / выкл должна выполняться для каждого элемента, который определяет всплывающую подсказку.

0 голосов
/ 21 июля 2009

Это известная проблема Windows XP и WPF (например, см. Здесь при подключении ).

Вы можете избежать этой проблемы, не используя многослойное окно (используйте окно с рамкой). Я думаю, что другим решением было бы установить все окно TopMost = true , но для меня это не очень хорошее решение, и я не уверен в этом.

Я не знаю, решает ли MS эту проблему, потому что я думаю, что это довольно глубоко в графическом слое XP.

...