3 Stimmen

UserControl untergeordnete Steuerelemente und FindName

Ich habe ein Silverlight UserControl, das das ContentPropertyAttribute verwendet, um die Children-Eigenschaft eines seiner Child-Panels freizugeben. Dies ermöglicht mir, dem Panel auf meiner Seite untergeordnete Steuerelemente hinzuzufügen:

<local:MyUserControl>
    <TextBox Name="tbTest" />
</local:MyUserControl>

Dies funktioniert, abgesehen davon, dass das Feld "tbTest" auf der Seite zwar vorhanden, aber nicht initialisiert ist. Bei näherer Betrachtung versucht die InitializeComponent-Methode, die TextBox (mit FindName) zu finden, was aber nicht gelingt (sie gibt null zurück).

Nach einigen Untersuchungen habe ich herausgefunden, dass Namescopes das Problem sind - das UserControl hat einen eigenen Namescope, so dass seine Kinder nicht mit der FindName-Methode der Seite, sondern mit der FindName-Methode des UserControls gefunden werden können.

Wie kann ich mein UserControl so ändern, dass die untergeordneten Steuerelemente durch die InitializeComponent-Methode auffindbar sind? Die Standard-Panels (StackPanel, Grid, etc.) scheinen damit kein Problem zu haben, also muss es eine Lösung geben?

Merci

1voto

Josh Punkte 66190

Es kann schwierig sein, an dieser Stelle zu tun, aber die beste Vorgehensweise wäre wahrscheinlich, Ihr Steuerelement von ItemsControl anstelle von UserControl abzuleiten. Dann hätten Sie das Problem mit den Namensbereichen nicht.

Ich nehme an, als Workaround könnten Sie einen Tauchgang in das Steuerelement mit VisualTreeHelper tun, um das tbTest-Feld manuell festlegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X