Я пытаюсь обновить все элементы текстового поля после загрузки страницы.
Вопрос
Почему текстовые поля не возвращаются при первой загрузке?
Пояснение
У меня есть MainWindow с элементом Frame для навигации между страницами 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 текстовых полей. почему это? Когда я отлаживаю его и расширяю свою страницу, я вижу там текстовые поля.
CaretBrush
TextBox к одному свойству модели представления, статическому ресурсу или чему-то еще, что вы меняете при переходе на страницу. - person Clemens   schedule 07.09.2014Navigate()
является асинхронным, поэтому вам следует зарегистрироваться наLoadCompleted
. - person Pragmateek   schedule 07.09.2014