У меня есть текстовое поле с прикрепленной меткой в DockPanel. LabeledContainer — это универсальный элемент управления со всей логикой для метки и элемента управления в DockPanel, а также для быстрого указания того, должна ли метка отображаться слева, справа, над или под элементом управления, но все это работает, и я считаю, что это не имеет отношения к данному вопросу.
Вот урезанный пример файла:
Код: Выделить всё
namespace MyApp.Controls
{
using ContentType = Label;
using MyType = LabeledTextBox;
public partial class LabeledTextBox : LabeledContainer
{
public new ContentType Content { get { return base.Content as ContentType; } set { base.Content = value; } }
public static readonly DependencyProperty SetTextBoxTextProperty = DependencyProperty.Register(
nameof(TextBoxText), typeof(string), typeof(MyType));
public string TextBoxText
{
get { return (string)GetValue(SetTextBoxTextProperty); }
set { SetValue(SetTextBoxTextProperty, value); }
}
}
public LabeledLabel() : base()
{
InitializeComponent();
}
}
Код: Выделить всё
get { return (string)GetValue(SetTextBoxTextProperty); }
Есть ли какая-то общая логика, которую я мог бы использовать для автоматического приведения возвращаемого типа к желаемому типу, как это уже известно из типа свойства? Есть ли какой-то синтаксис для ссылки на тип возвращаемого значения текущей области? Предпочтительно, чтобы это можно было разрешить при компиляции, чтобы вообще не снизить производительность, но я рад рассмотреть другие решения.
В более широком смысле, это шаблон, к которому я пришел для основных свойств зависимостей (обратите внимание на использование MyType для привязки всей регистрации этих свойств к одной строке). Мне любопытно, является ли это в каком-то смысле неоптимальным, или есть какой-то другой подход, который мог бы решить мою проблему или еще больше уменьшить повторяющийся код, и я просто лаю не по тому дереву, делая это таким образом.
Иногда в свободное время я пишу на Rust, но я думал о макросах на этом языке, и этот вариант мог бы и был бы очевидным решением этих повторяющихся базовых свойств зависимостей, но я не знаком с такого рода инструментом на C# если он существует.
Подробнее здесь: https://stackoverflow.com/questions/799 ... f-getvalue
Мобильная версия