C# WPF Как получить текст с контрола?

Вообщем Content - object и может быть разный: ComboBox, TextBlock, TextBox и т.д. можно ли не сравнивая тип каждого получить Text с object? Есть у них какой - небудь общий интерфейс/клас?


Ответы (1 шт):

Автор решения: aepot

Ответ: нет, универсального способа нет, так как у каждого типа контрола свой набор свойств и общий родитель FrameworkElement не содержит свойства Text. Да и типов всех возможных контролов не так много.

Таким образом, реализовтаь это не так сложно. Самый простой способ - использовать сопоставление шаблонов - Pattern Matching.

string text = "";
if (Content is TextBox textBox)
    text = textBox.text;
else
if (Content is TextBlock textBlock)
    text = textBlock.text;
else
if (Content is Label label)
    text = label.Content.ToString();

или вот так

string text = "";
switch (Content)
{
    case TextBox textBox:
        text = textBox.text;
        break;
    case TextBlock textBlock:
        text = textBlock.text;
        break;
    case Label label:
        text = label.Content.ToString();
        break;
    default:
        throw new ArgumentException("Тип контрола не опознан", typeof(Control).Name);
}

С другой стороны, вы можете создать свой интерфейс и унаследовать от него все необходимые вам контролы. Но мне кажется, этот способ сложнее, чем указанный выше.

→ Ссылка