В методе регистрации, который вы зарегистрировали как visText
, имя поля не имеет ничего общего с самим свойством.Вы также, кажется, определяете вложенное свойство, которое будет использоваться как обычное свойство, вы должны определить его как обычное свойство зависимости.
Далее вы создаете два свойства, свойство зависимости без CLR-оболочки.и обычное свойство, выполняя это:
public String visText
{
get { return theBox.Text; }
set { theBox.Text = value; }
}
Это не имеет никакого отношения к значению вашего фактического свойства зависимости, поскольку оно никогда не обращается к нему.Кроме того, поле свойства должно быть статическим и доступным только для чтения.
Чтение через Обзор свойств зависимости рекомендуется, так как это довольно запутанно, также ознакомьтесь с статьей о созданиипользовательские свойства зависимостей , которые должны быть весьма полезны.
Чтобы ответить на вопрос о том, как взаимодействовать с дочерними элементами управления: создайте (правильные) свойства зависимостей и свяжите их с ними.
Поскольку свойство уже существует у ребенка, вы также можете использовать его с AddOwner
:
public static readonly DependencyProperty TextProperty =
TextBox.TextProperty.AddOwner(typeof(MyControl));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
<!-- Assuming a usercontrol rather than a custom control -->
<!-- If you have a custom control and the child controls are created in code you can do the binding there -->
<UserControl ...
Name="control">
<!-- ... -->
<TextBox Text="{Binding Text, ElementName=control}"/>
<!-- ... -->
</UserControl>