Части "get" и "set" объявления свойства в DependencyProperty на самом деле не вызываются системой привязки данных WPF - они там, по сути, для удовлетворения только компилятора.
Вместо этого измените объявление свойства, чтобы оно выглядело так:
public string FooText
{
get { return (string)GetValue(FooTextProperty); }
set { SetValue(FooTextProperty, value); }
}
... и ваш XAML:
<UserControl ...
x:Name="me">
<Grid>
<TextBlock Text="{Binding FooText,ElementName=me}" />
</Grid>
</UserControl>
Теперь ваш TextBox.Text просто привязывается непосредственно к свойству «FooText», поэтому вы можете в свою очередь привязать свойство FooText к «Name», как вы это делаете в настоящее время.
Другим способом является привязка TextBlock.Text к привязке RelativeSource, которая находит свойство FooText первого предка типа «FooBox», но я обнаружил, что это более сложно, чем просто дать элементу управления внутреннее x: Name и используя привязку элемента.