Я хотел бы использовать присоединенное свойство для установки свойств нескольких дочерних элементов.Только во время инициализации VisualTreeHelper.GetChildrenCount(parent)
возвращает 0 дочерних элементов.
Когда связывающий текст MyText изменяется после визуализации представления, все работает должным образом.
Как можно преобразовать дочерние элементы перед рендерингом?
XAML:
<StackPanel local:SetTextService.Text="{Binding MyText}">
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
C #:
public class SetTextService : DependencyObject
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.RegisterAttached("Text", typeof(string), typeof(SetTextService),
new FrameworkPropertyMetadata("", new PropertyChangedCallback(TextPropertyChanged)));
public static void SetText(UIElement element, string value)
{
element.SetValue(TextProperty, value);
}
public static string GetText(UIElement element)
{
return (string)element.GetValue(TextProperty);
}
private static void TextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
SetChildControlText(d, (string)e.NewValue);
}
private static void SetChildControlText(DependencyObject parent, string text)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
PropertyInfo propInfo = child.GetType().GetProperty("Text");
if (propInfo != null) propInfo.SetValue(child, text);
SetChildControlText(child, text);
}
}
}