我正在尝试在加载我的页面后更新我的所有文本框元素。
问题
为什么第一次加载时没有返回文本框?
解释
我有一个带有 Frame 元素的 MainWindow,可以在 wpf 页面之间导航。
因此,当用户单击菜单项时,页面会加载到框架中。
以下是用户单击 MenuItem 时的代码:
将新页面加载到框架中的代码(方法导航)
public static void Navigate(Page page, double fadeTime = 0.6)
{
MainWindow MainWin = (MainWindow) Application.Current.MainWindow;
Frame NavFrame = MainWin.mainFrame;
if (NavFrame.Content != page)
{
NavFrame.NavigationService.Navigate(page);
//Gebruik Dispatcher om Fadein Effect te kunnen toepassen
Frame mainFrame = NavFrame;
NavFrame.Dispatcher.BeginInvoke(
new Action(() =>
{
//Voeg Animatie Toe
NavFrame.Opacity = 0;
DoubleAnimation fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(fadeTime), FillBehavior.HoldEnd);
mainFrame.BeginAnimation(UIElement.OpacityProperty, fadeIn, HandoffBehavior.Compose);
}));
//Bij navigeren naar andere pagina roep GC aan.
GC.Collect();
}
int amount = 0;
//Apply Color on CaretBrush
foreach (TextBox tb in Worker.FindVisualChildren<TextBox>(page))
{
amount++;
tb.CaretBrush = (Brush)new BrushConverter().ConvertFromString("#FF8E9CFF");
}
Worker.ShowModernBox(amount.ToString()); //Custom messagebox
page.UpdateDefaultStyle();
page.UpdateLayout();
}
FindVisualChildren 方法
//Haal alle elementen van huidige view op.
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
//Indien het object gevuld is met componenten
if (depObj != null)
{
//Voor ieder Object in huidige view
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
//geef Child terug
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T) child;
}
//geef CHilds van CHild terug.
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
问题
用户第一次加载此页面时,它将 int 数量返回为 0,当第二次单击时,我返回了所有 19 个文本框。这是为什么?当我调试它并展开我的页面时,我可以看到那里的文本框