Создать прокси для свойства зависимости

Я пытаюсь создать простой прокси свойства зависимостей. Я сделал собственный элемент управления, это средство выбора файлов, состоящее из текстового поля (имя: "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: Для всех остальных, у которых есть проблемы с пониманием ответа, я сделал небольшую графику

6
задан Community 23 May 2017 в 12:03
поделиться