Вы можете установить фокус на дочерний элемент только после того, как сам дочерний элемент стал видимым.Один из вариантов - найти дочерний элемент, на который вы хотите сфокусироваться, а затем добавить обработчик к его IsVisibleChanged
.В обработчике сфокусируйте объект, а затем удалите обработчик.
private void stackPanel1_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (stackPanel1.IsVisible)
{
UIElement elm = stackPanel1.Children[0];
FrameworkElement fwe = (FrameworkElement)elm;
fwe.IsVisibleChanged += new DependencyPropertyChangedEventHandler(fwe_IsVisibleChanged);
}
}
void fwe_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
FrameworkElement fwe = (FrameworkElement)sender;
fwe.IsVisibleChanged -= new DependencyPropertyChangedEventHandler(fwe_IsVisibleChanged);
Keyboard.Focus((IInputElement)sender);
}
Редактировать: вы должны иметь доступ к коллекции элементов в обработчике событий IsVisibleChanged.код:
void sp1_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Console.WriteLine(sp1.Items.Count);
}