T findComponentFromTemplate <T>(Fotografia f, string nomeComponente) { // Per ricavare il componente desiderato, devo fare diversi passaggi // 2. dalla foto ricavo il ListBoxItem che la contiene ContentPresenter contentPresenter; var test = itemsControl.ItemContainerGenerator.ContainerFromItem(f); if (test is ContentControl) { // 3. dal ListBoxItem ricavo il suo ContentPresenter ContentControl listBoxItem = (ContentControl)test; contentPresenter = AiutanteUI.FindVisualChild <ContentPresenter>(listBoxItem); } else { // IL componente è già avvolto direttamente nel presenter contentPresenter = (ContentPresenter)test; } // 4. con il ContentPresenter ricavo il DataTemplate (del singolo elemento) DataTemplate dataTemplate = contentPresenter.ContentTemplate; // 5. con il DataTemplate ricavo l'Image contenuta return((T)dataTemplate.FindName(nomeComponente, contentPresenter)); }
private void mostraAreaStampabileButton_Click(object sender, RoutedEventArgs e) { ContentPresenter myContentPresenter = AiutanteUI.FindVisualChild <ContentPresenter>(LsImageGallery); // ListBoxItem co = (ListBoxItem)LsImageGallery.ItemContainerGenerator.ContainerFromIndex( 0 ); iteraAlberoFigli(myContentPresenter); // iteraAlberoVisibili(); }
void iteraAlberoFigli(FrameworkElement ele) { int quanti = VisualTreeHelper.GetChildrenCount(ele); for (int i = 0; i < quanti; i++) { var child = VisualTreeHelper.GetChild(ele, i) as FrameworkElement; if (child.Name == "fotoCanvas") { // Per far prima, invece che applicarlo a tutti, la applico soltanto ai componenti visibili if (AiutanteUI.IsUserVisible(ele, LsImageGallery)) { Canvas canvas = (Canvas)child; // prima controllo che non ce l'ho già messo if (AiutanteUI.FindVisualChild <Border>(canvas, "borderCopriA") == null) { Border borderA = new Border(); borderA.Name = "borderCopriA"; borderA.HorizontalAlignment = HorizontalAlignment.Left; borderA.VerticalAlignment = VerticalAlignment.Top; borderA.Style = (Style)FindResource("styleBorderCopriA"); canvas.Children.Add(borderA); borderA.SetValue(Canvas.ZIndexProperty, 99); } if (AiutanteUI.FindVisualChild <Border>(canvas, "borderCopriB") == null) { Border borderB = new Border(); borderB.Name = "borderCopriB"; borderB.HorizontalAlignment = HorizontalAlignment.Left; borderB.VerticalAlignment = VerticalAlignment.Top; borderB.Style = (Style)FindResource("styleBorderCopriB"); canvas.Children.Add(borderB); borderB.SetValue(Canvas.ZIndexProperty, 99); } } } else { iteraAlberoFigli(child); } } }