Я пытаюсь создать простой прокси свойства зависимостей. Я сделал собственный элемент управления, это средство выбора файлов, состоящее из текстового поля (имя: "TextBox_FilePath"
) и кнопки, показывающей диалоговое окно открытия файла.
Поскольку я создаю повторно используемый элемент управления, я хотел бы, чтобы он имел свойство "SelectedFilePath"
. Поскольку свойство Text
кажется идеальным для того, чтобы мой элемент управления был свойством "SelectedFilePath"
, я просто хотел бы проксировать это свойство зависимостей.
Первый подход, который я сделал, был следующим:
public static readonly DependencyProperty SelectedFilePathProperty = TextBox.TextProperty;
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
который работал, но вызывал исключение при попытке привязки к этому свойству.Затем я сказал:
public static readonly DependencyProperty SelectedFilePathProperty =
DependencyProperty.Register("SelectedFilePath", typeof (string), typeof (FilePicker), new PropertyMetadata(default(string)));
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
что работает, но я понятия не имею, почему?! Где я указал, что мне нужно свойство text
текстового поля?
Чего мне не хватает, чтобы просто проксировать это свойство зависимостей?
РЕДАКТИРОВАТЬ:
Решение с AddOwner
тоже не работает, оно выдает исключение, говорящее, что «привязка может применяться только к свойству зависимости». Код:
public static readonly DependencyProperty SelectedFilePathProperty =
TextBox.TextProperty.AddOwner(typeof(FilePicker));
public string SelectedFilePath
{
get { return (string)this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
Что я не понимаю?
РЕДАКТИРОВАТЬ2: Для всех остальных, у которых есть проблемы с пониманием ответа, я сделал небольшую графику