Имея страницу и желая найти элемент управления, связанный с определенным свойством, я пересекаю VisualTree
.Это делается для события Page.Loaded
(на основе этого вопроса ).При обходе Visual Tree
я сталкиваюсь с текстовым полем, которое я искал (в тестовом примере), но при использовании
var be = textbox.GetBindingExpression(System.Windows.Controls.TextBox.TextProperty);
be
имеет значение null.
Должен ли WPF выполнять /визуализировать некоторые визуальные элементы управления и привязки.И если да, то какое событие я мог бы подключить для прохождения VisualTree с «активированными» привязками?
Кстати: у меня уже есть работа для примера проекта, где я пересекаю VisualTree
нажатием кнопки.(страница загружена, и привязки полностью работают)
РЕДАКТИРОВАТЬ
XAML-код:
<dxe:TextEdit Grid.Row="2" Grid.RowSpan="1" Grid.Column="5" Style="{DynamicResource {x:Static cbc:CustomStyle.QuestionTextEditStyle}}" Text="{Binding Path=Voorletters, Mode=TwoWay, ValidatesOnDataErrors=true}"/>
Код позади:
private void BasePage_Loaded(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(_focusControlBindedToProperty))
{
this.FindVisualElementBindedTo(this, _focusControlBindedToProperty);
}
}
private void FindVisualElementBindedTo(Visual visual, String propertyName)
{
try
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++)
{
// Retrieve child visual at specified index value.
Visual childVisual = (Visual)VisualTreeHelper.GetChild(visual, i);
if (childVisual is System.Windows.Controls.Primitives.TextBoxBase)
{
System.Windows.Controls.Primitives.TextBoxBase tbb = (System.Windows.Controls.Primitives.TextBoxBase)childVisual;
BindingExpression be = tbb.GetBindingExpression(System.Windows.Controls.TextBox.TextProperty);
if (be != null && be.ParentBinding != null && be.ParentBinding.Path.Path == propertyName)
{
tbb.Focus();
tbb.SelectAll();
return;
}
}
FindVisualElementBindedTo(childVisual, propertyName);
}
}
catch { }
}