Laden...

[erledigt] An ArrangeOverride übergebende finalSize plötzlich anders

Erstellt von Hurby vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.342 Views
H
Hurby Themenstarter:in
222 Beiträge seit 2010
vor 9 Jahren
[erledigt] An ArrangeOverride übergebende finalSize plötzlich anders

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.

P
157 Beiträge seit 2014
vor 9 Jahren

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!

H
Hurby Themenstarter:in
222 Beiträge seit 2010
vor 9 Jahren

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.