Вертикальное пространство в командных ссылках в TaskDialog начиная с версии 1.1

Я заметил большое вертикальное пространство в диалоге задач (пространство между заголовками командных ссылок и текстами инструкций), которое выглядит очень плохо. Он начал появляться сразу после того, как я обновил WindowsAPICodePack до версии 1.1.

Вот код:

TaskDialog td = new TaskDialog();
var b1 = new TaskDialogCommandLink("b1", "foo", "bar");
var b2 = new TaskDialogCommandLink("b2", "one", "two");
td.Controls.Add(b1);
td.Controls.Add(b2);
td.Caption = "Caption";
td.InstructionText = "InstructionText";
td.Text = "Text";
td.Show();

Вот результат:

Гадкий диалог задач с вертикальным пространством в командных ссылках

Раньше "bar" появлялся прямо под "foo", но теперь это выглядит так, как будто между ними есть пустая строка. Это проблема с моей стороны (и кто-нибудь знает, что это может быть), или вы, ребята, тоже испытываете это?

2 ответа

Я получил ту же ошибку в версии 1.1. Кажется, это связано с TaskDialogCommandLink класса toString метод string.Format с Environment.NewLine, который не отображается чисто при передаче самому TaskDialog.

public override string ToString()
{
  return string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}",
    Text ?? string.Empty,
    (!string.IsNullOrEmpty(Text) && !string.IsNullOrEmpty(instruction)) ?
        Environment.NewLine : string.Empty,
    instruction ?? string.Empty);
}

В любом случае я использую подкласс реализации, чтобы упростить аргументы, и перегрузил метод, чтобы передать строку, содержащую простое '\ n', хотя мне не нужно интернационализировать мое приложение, и поэтому я могу делать вещи немного проще.

public override string ToString()
{
    string str;

    bool noLabel = string.IsNullOrEmpty(this.Text);
    bool noInstruction = string.IsNullOrEmpty(this.Instruction);

    if (noLabel & noInstruction)
    {
        str = string.Empty;
    }
    else if (!noLabel & noInstruction)
    {
        str = this.Text;
    }
    else if (noLabel & !noInstruction)
    {
        str = base.Instruction;
    }
    else
    {
        str = this.Text + "\n" + this.Instruction;
    }
    return str;
}

Я заметил те же проблемы с пробелами в API Code Pack v1.1 в Windows 8. DougM прав, его ToString() переопределение решит проблему.

Вот обновленная версия, просто поместите этот класс в свой проект и вместо использования TaskDialogCommandLinkиспользовать TaskDialogCommandLinkEx вместо.

using Microsoft.WindowsAPICodePack.Dialogs;

internal class TaskDialogCommandLinkEx : TaskDialogCommandLink
{
    public override string ToString()
    {
        string str;

        var noLabel = string.IsNullOrEmpty(Text);
        var noInstruction = string.IsNullOrEmpty(Instruction);

        if (noLabel & noInstruction)
        {
            str = string.Empty;
        }
        else if (!noLabel & noInstruction)
        {
            str = Text;
        }
        else if (noLabel & !noInstruction)
        {
            str = Instruction;
        }
        else
        {
            str = Text + "\n" + Instruction;
        }
        return str;
    }
}
Другие вопросы по тегам