Net Framework, Office 365, C#, WPF, ASP.Net, Visual Studio, Programmiersprachen PC, C# Programmieren, vba, SQL Server, free source code snippets Antivirus free
#

WPF: UserControl in Laufzeit finden
 
 
Aufgabe:
Suche bestimmtes Usercontrol in einem Panel, welches zur Laufzeit dynamisch hinzugefügt wurde.
 
Problem:
FrameworkElement.FindName(„UserControl_Name“) funktioniert nicht bei dynamisch erzeugten UserControls.
 
Hier eine konkrete Such-Methode.
Der Typ des UserContols und des Parent-Controls wird in diesem Beispiel direkt  angegeben, da die Anwendung keinen globalen Charakter ha.t

private UcFolderSet find_UserControl(StackPanel parent, string sName)
{
//----------------< find_UserControl() >----------------
foreach (FrameworkElement element in parent.Children)
{
if(element.Name ==sName )
{
//--< found >--
//*return and break
return element as UcFolderSet;
//--</ found >--
}
}
return null;
//----------------</ find_UserControl() >----------------
}

 
 
Aufruf durch Hauptfunktion mit find_UserControl(parent,search_name)

//--< add Photo to UserControl >--
string sUcName= "UcFolderSet_" + sDate.Replace("-", "_");
UcFolderSet ucFolder_of_Date = find_UserControl(panel_Folders, sUcName);
 
if (ucFolder_of_Date != null)
{
//*run method inside of the UserControl
ucFolder_of_Date.add_Image(fileInfo.FullName);
}
//--</ add Photo to UserControl >--
 

 
Im Breakpoint des Debuggers unter Visual Studio sieht man, dass das Panel in Children[0] ein Element gespeichert hat.
Es ist von einem bekannten UserControl Typ (hier UcFolderSet)

 
Keine Lösung:
Folgende Lösungen gehen NICHT zur Laufzeit.
Bestehende Controls die schon per XAML eingebaut wurden, werden allerdings gefunden:

UcUserControl ctl = (UcUserControl) parent_control.FindName(search_Name);
 

 
Und auch nicht

object objFound = (object) panel_ control.FindName(search_Name);
 

 
 
Im gezeigten Beispiel muss ein einem StackPanel eines von mehreren Child-Elementen gefunden werden.
Die Unterelemente im StackPanel werden je nach Bedarf zur Laufzeit erstellt und müssen noch vor einer finalen Anzeige gefunden werden.
Die Elemente sind somit auch nicht durch FindName(Name) und VisualTreeHelper zu finden.

 
 
Betrifft: WPF, C#, UserControls
 
Mobile
»
WPF: Video in Vorschau anzeigen MediaElement,MediaPlayer
»
WPF: UserControl zur Laufzeit finden
»
WPF: Lade UserControl zur Laufzeit

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Raimund.Popp@Microsoft-Programmierer.de