Подсказки в стиле Проводника Windows / Aero в C #? - PullRequest
5 голосов
/ 27 марта 2011

Если вы используете Windows Vista или более позднюю версию, вы, вероятно, видели этот вид всплывающей подсказки с цветным текстом и значком:

enter image description here

Я искал по различным ключевым словам, напримерExplorer, Aero, Windows, всплывающие подсказки и еще не нашли никакой полезной информации о том, как этого добиться.

Желательно, чтобы решение было для WinForms.Кому-нибудь повезло?

Ответы [ 2 ]

8 голосов
/ 14 апреля 2011

Это сообщение в блоге на wyDay имеет решение.

Ссылка на серию из трех частей под названием «Перетаскивание в стиле оболочки в .NET»:

Часть 3 ссылается на этот архив , который содержит целую кучу проектов. Обратите внимание, что для компиляции может потребоваться настроить проекты DragDropLib и WpfDragDropLib, чтобы разрешить небезопасный код.

Там есть образцы внутри, но для удобства вот выдержка:

#region Drop target accepting FileDrop

private void textBox2_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = e.AllowedEffect & DragDropEffects.Copy;
        DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect, "Copy to %1", "Here");
    }
    else
    {
        e.Effect = DragDropEffects.None;
        DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect);
    }
}

private void textBox2_DragOver(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = e.AllowedEffect & DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
    DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect);
}

private void textBox2_DragLeave(object sender, EventArgs e)
{
    DropTargetHelper.DragLeave(textBox2);
}

private void textBox2_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = e.AllowedEffect & DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
    DropTargetHelper.Drop(e.Data, new Point(e.X, e.Y), e.Effect);

    if (e.Effect == DragDropEffects.Copy)
        AcceptFileDrop(textBox2, e.Data);
}

#endregion // Drop target accepting FileDrop

Из моих экспериментов кажется, что я могу просто написать e.Effect = DragDropEffects.Copy; вместо e.Effect = e.AllowedEffect & DragDropEffects.Copy;; хотя в настоящее время я не понимаю, для чего существует &, поэтому кто-то может помочь мне с этим. Кроме того, похоже, что текстовый тип не будет отображать всплывающую подсказку с описанием.

В противном случае, я определенно очень доволен этим.

Надеюсь, что это поможет любому с этой проблемой.

4 голосов
/ 10 апреля 2011

Какую технологию вы хотите использовать?WPF или WinForms?Если вы используете WPF, вы можете реализовать свою собственную всплывающую подсказку с помощью элемента управления Popup и реализовать собственную подсказку самостоятельно.

Вам нужно будет прикрепить всплывающую подсказку к событиям перемещения мыши и разместить элемент управления относительно курсора мыши..

Этот метод требует лишь небольших усилий, и вы можете настроить подсказку, используя все, что может предложить WPF - изображения, анимация и т. Д.

Ресурсы WPF:

Может быть, WinForms имеет всплывающее окно управления.Реализация его тоже не должна быть очень сложной.

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

Ресурсы WinForms:

...