Hallo,
ich habe mir ein eigenes FrameworkElement erstellt, welches den verfügbaren Platz zu gleichen Teilen auf einen TextBlock (links) und eine TextBox (rechts) aufteilen soll. Wenn ich nun in meine TextBox viel Text eingebe, wird der ArrangeOverride-Methode plötzlich eine größere finalSize übergeben, sodass das Layout nicht mehr stimmt. (Siehe Anhang) Leider weiß ich nicht, woran dies liegt. Habt ihr vielleicht Ideen?
Hier noch der Code zum Layout-Prozess:
protected override Size MeasureOverride(Size availableSize)
{
Size desiredSize = new Size();
foreach (UIElement child in this.children)
{
//measure child with available size
child.Measure(availableSize);
//add with of current child to desired width
desiredSize.Width += child.DesiredSize.Width;
//get maximum height
desiredSize.Height = Math.Max(desiredSize.Height, child.DesiredSize.Height);
}
return desiredSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
Rect rect = new Rect(0, 0, finalSize.Width / 2, 0);
foreach (UIElement child in this.children)
{
//arrange child with half of width and desired height (textbox gets height of textblock)
rect.Height = Math.Max(child.DesiredSize.Height, rect.Height);
child.Arrange(rect);
//arrange next child beside
rect.X += child.RenderSize.Width;
//set height of next child (textbox)
rect.Height = child.RenderSize.Height;
}
return finalSize;
}
Vielen Dank im Voraus
Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.
Das liegt vermutlich daran, dass die Textbox selbst als größe "Auto" hat...dadurch wird in der TextBox selbst das Arrange mit der Länge des strings berechnet.
Du kannst dir das Arrange auch sparen denke ich. Du hast sicherlich ein ControlTemplate geschrieben, darin kannst du deine beiden Textboxen durch ein Grid entsprechend aufteilen.
Ich glaub du musst auch margin und padding deines Steuerlementes mit ins MeasureOverride einrechnen...
vg
Wenn's zum weinen nicht reicht, lach drüber!
Hallo Parso,
das war eine Punktlandung deinerseits, besten Dank.
PS: Margin und Padding braucht man beim Layout nicht zu berücksichtigen, dies berücksichtigt die WPF bereits in den an MeasureOverride und ArrangeOverride übergebenen Werten.
Nochmals vielen Dank
VG
Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.