Ich habe UserControl in WPF 4.0, die Schaltflächen, Beschriftungen, Textfelder usw. enthält. Ich möchte diese Steuerelemente Schleife und wenn ich ein buton, möchte ich seinen Namen nehmen und speichern Sie es auf meiner Liste. Im Grunde möchte ich nur eine Names_list aller meiner Buttons im UserControl erstellen.Kann Kontrollen in User Control im VisualTreeHelper
Ich habe eine Methode, die alle Kontrollen durchläuft und wenn es einen Knopf findet, speichert seinen Namen -
public void EnumVisual(Visual myVisual)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++)
{
// Retrieve child visual at specified index value.
Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i);
Button _button = childVisual as Button;
if (_button != null)
{
Class_Button _newButtonClass = new Class_Button();
if (_button.Name != null)
{
_newButtonClass.ButtonName = _button.Name;
}
ButtonsList.Add(_newButtonClass);
}
// Enumerate children of the child visual object.
EnumVisual(childVisual);
}
}
ich eine leere Liste immer bekommen. Wenn ich den Code einfüge, indem ich ihn debugge und den VisualTree meines UserControls beobachte, sehe ich alle Panels und GroupBoxes und Grids, aber ich sehe keine Buttons, Labels und Texboxen, obwohl jedes Steuerelement ax: Name und jedes Control ist x : FieldModifier = "öffentlich". Das ist sehr merkwürdig .... Und ich verstehe nicht den Grund dafür und wie ich dieses Problem lösen kann ... kann mir jemand sagen, was ich falsch mache? Dank
Wann rufen Sie EnumVisual()? Sind Sie sicher, dass die Vorlage zu diesem Zeitpunkt angewendet wurde? – GazTheDestroyer
@GazTheDestroyer Ich erstelle mein MainWindow, welches das UserControl enthält und nachdem es angezeigt wird, rufe ich die Funktion auf, die die Buttonliste durch einen Klick auf ein MenuItem bekommt ..... und an diesem Punkt kann ich das UserControl in meinem MainWindow sehen ... –
Das bedeutet nicht, dass das UserControl bereits geladen ist. Es befindet sich möglicherweise in der Mitte des Prozesses an dem Punkt, an dem Ihr Code diese Methode eingibt. Versuchen Sie, diese Methode aufzurufen, sagen wir, in einem temporären Button Click Event Handler. – EvAlex