Meine Frage ist über das Binden der Eigenschaft eines Elements an ein anderes.Binding Rasterhöhe mit FindAncestor und AhnenLevel zu einem anderen Raster
Hier wird die Struktur meiner Code ist:
Datenvorlage enthält ein Raster (lassen Sie uns das Gitter
GridA
genannt) und im Netz, ich eine Instanz einer Kontrolle angeben, genanntControlA
.ControlA
ist eineUserControl
, die eineGrid
enthält. Es gibt eine benutzerdefinierte Logik inControlA
(Code-Behind), die den Inhalt dynamisch erstellt - aber in Kürze verwendet es eine andere Datenvorlage. Die Datenvorlage fürControlA
besteht aus einer weiterenGrid
. Ich möchte dieHeight
-Eigenschaft für dieses Raster in dieser Datenvorlage an dieHeight
-Eigenschaft derGrid
in der Datenvorlage binden, die in meinem ersten Aufzählungspunkt oben verwiesen wird (das RasterGridA
genannt).
Hier ist die XAML, die ich für die Bindung verwendet haben, aber im Wesentlichen wissen, es ist nicht funktioniert, wie es ist nicht das Grid zu finden:
<Grid Height="{Binding Path=ActualHeight,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Grid,
AncestorLevel=2},
UpdateSourceTrigger=PropertyChanged}">
</Grid>
Ich verstehe, dass AncestorLevel=2
durch die Angabe, dass es verwendet das zweite "gefundene" Vorkommen des Typs, den Sie suchen, in diesem Fall lautet der Typ Grid
. Also in meiner Meinung, wird es zuerst die Grid
in ControlA
finden, dann wird es weiterhin auf den Baum gehen und finden Sie die Grid
in der ersten Datenvorlage, die die Grid
mit dem Namen GridA
ist. Dies sollte das zweite Vorkommen sein, richtig?
Danke für die Rückmeldung. Ich stimme Ihnen mit Kommentaren bezüglich des Designs zu - das war nicht meine Entscheidung und wurde vor meiner Hinzufügung zu diesem Projekt gemacht. In Bezug auf Ihren Vorschlag ist es das dritte Raster, das an das erste Raster binden muss. Also, Ihr Beispiel für das dritte Gitter spezifiziert AncestorLevel = 2, was ich in meinem Beispiel angegeben habe. Also, ich bin verwirrt. Wenn wir beide AncestorLevel = 2 angeben, was mache ich dann falsch? – Chris
Ich habe drei Gitter, während Sie angeben, dass Sie zwei haben. Aber vielleicht habe ich deine Frage missverstanden. Funktioniert es, wenn Sie die Stufe Ihres Vorfahren auf 1 ändern? –