C# WPF Как получить текст с контрола?
Вообщем Content - object и может быть разный: ComboBox, TextBlock, TextBox и т.д. можно ли не сравнивая тип каждого получить Text с object? Есть у них какой - небудь общий интерфейс/клас?
Ответы (1 шт):
Ответ: нет, универсального способа нет, так как у каждого типа контрола свой набор свойств и общий родитель 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);
}
С другой стороны, вы можете создать свой интерфейс и унаследовать от него все необходимые вам контролы. Но мне кажется, этот способ сложнее, чем указанный выше.