В шаблоне свойств зависимостей в WPF автоматически приводит результат GetValue() к ожидаемому типу возвращаемого значениC#

Место общения программистов C#
Ответить
Anonymous
 В шаблоне свойств зависимостей в WPF автоматически приводит результат GetValue() к ожидаемому типу возвращаемого значени

Сообщение Anonymous »

Я работаю с WPF и C# с .Net и создаю некоторые базовые элементы управления, используя свойства зависимостей. Я пытаюсь сделать шаблон для такого рода вещей максимально повторяемым и простым, с минимальными изменениями, если, скажем, я копирую свойство зависимости и вставляю его, редактируя то, что мне нужно, чтобы создать новое свойство.
У меня есть текстовое поле с прикрепленной меткой в ​​DockPanel. LabeledContainer — это универсальный элемент управления со всей логикой для метки и элемента управления в DockPanel, а также для быстрого указания того, должна ли метка отображаться слева, справа, над или под элементом управления, но все это работает, и я считаю, что это не имеет отношения к данному вопросу.
Вот урезанный пример файла:

Код: Выделить всё

namespace MyApp.Controls
{
using ContentType = TextBox;
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); }
не потому, что это вызывает ошибки, а потому, что мне придется изменить это, если я скопирую/вставлю, чтобы создать новое свойство зависимости, чтобы отобразить что-то вроде HorizontalAlignment TextBox, что я здесь часто делаю.
Есть ли какая-то общая логика, которую я мог бы использовать для автоматического приведения возвращаемого типа к желаемому типу, как это уже известно из типа свойства? Есть ли какой-то синтаксис для ссылки на тип возвращаемого значения текущей области? Предпочтительно, чтобы это можно было разрешить при компиляции, чтобы вообще не снизить производительность, но я рад рассмотреть другие решения.
В более широком смысле, это шаблон, к которому я пришел для основных свойств зависимостей (обратите внимание на использование MyType для привязки всей регистрации этих свойств к одной строке). Мне любопытно, является ли это в каком-то смысле неоптимальным, или есть какой-то другой подход, который мог бы решить мою проблему или еще больше уменьшить повторяющийся код, и я просто лаю не по тому дереву, делая это таким образом.
Иногда в свободное время я пишу на Rust, но я думал о макросах на этом языке, и этот вариант мог бы и был бы очевидным решением этих повторяющихся базовых свойств зависимостей, но я не знаком с такого рода инструментом на C# если он существует.
(Изменить): Изменено объявление «ContentType» с помощью TextBox вместо метки, как это было сделано ошибочно при составлении примера кода.

Подробнее здесь: https://stackoverflow.com/questions/799 ... f-getvalue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»