Я думаю, что это не сработает, потому что, что бы вы ни присвоили TestSendUiElement DependencyProperty
, оно не будет частью VisualTree
. Так что VisualTreeHelper.GetChildrenCount(...)
не будет работать.
В качестве прямой замены, LogicalTreeHelper
должен добиться цели.
А если вы знаете тип объекта или можете, то еще лучше использовать открытые свойства, такие как ItemsControl.Items
, ContentControl.Content
и т. Д., За исключением классов, наследуемых от Panel
(они LogicalChildren свойство внутреннее).
Если вы ленивый, вы можете сделать следующее (непроверенный код):
<my:Test.TestSendUiElement>
<ItemsControl Margin="0,2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<TextBox Height="23" Width="50" Margin="0,0,5,0" />
<TextBox Height="23" Width="125" />
<ItemsControl>
</my:Test.TestSendUiElement>
Затем вы меняете тип свойства DP на ItemsControl
, и теперь вы можете получить доступ к дочерним элементам через this.TestSendUIElement.Items. ItemsControl
, вероятно, не такой легкий, как панель, но использование LogicalTreeHelper
, вероятно, также не будет оптимальным. Зависит от сценария.