Laden...

Silverlight ArrangeOverride/MeasureOverride

Erstellt von KainPlan vor 11 Jahren Letzter Beitrag vor 11 Jahren 680 Views
K
KainPlan Themenstarter:in
133 Beiträge seit 2009
vor 11 Jahren
Silverlight ArrangeOverride/MeasureOverride

Hallo,

ich bin gerade dabei ein nine patch control für windows phone 8 zu schreiben.
ich hab mich für das folgende controltemplate entscheiden:


                <ControlTemplate TargetType="local:NinePatch">
                    <Border Name="BorderContainer">
                        <Grid Name="GridContainer" >
                            <Image Name="Image01" />
                            <Image Name="Image02" />
                            <Image Name="Image03" />
                            <Image Name="Image04" />
                            <Image Name="Image05" />
                            <Image Name="Image06" />
                            <Image Name="Image07" />
                            <Image Name="Image08" />
                            <Image Name="Image09" />
                            <Border Name="BorderContentContainer"/>
                        </Grid>
                    </Border>
                </ControlTemplate>

die bilder werden innerhalb des GridContainer via column/row positioniert und gestrecht. der BorderContentContainer.Child property wird die ContentProperty für NinePatch zugewiesen. der BorderContentContainer erhält auch noch ein Margin das von dem .9patch-bild bestimmt wird.

Das NinePatch control sollte sich nun eigentlich anhand der größe des Inhalts vom BorderContentContainer ausrichten das passiert aber nicht. Das Control wird immer unerklärbar groß. Wenn ich jetzt aber anfange MeasureOverride und/oder ArrangeOverride zu nutzen verstehe ich überhaupt nicht mehr was passiert.

ein bild davon ist im anhang.

und hier mal die overrides die ich nutze:

    
        protected override Size ArrangeOverride(Size finalSize)
        {
            double newWidth, newHeight;
            newWidth = _borderContentContainer.ActualWidth + _contentMargin.Left + _contentMargin.Right;
            newHeight = _borderContentContainer.ActualHeight + _contentMargin.Top + _contentMargin.Bottom;

            newWidth = newWidth < _minSize.Width ? _minSize.Width : newWidth;
            newHeight = newHeight < _minSize.Height ? _minSize.Height : newHeight;
            return new Size(newWidth, newHeight);
        } 

        protected override Size MeasureOverride(Size availableSize)
        {
            Size contentSize = availableSize;
            contentSize.Width -= _contentMargin.Left + _contentMargin.Right;
            contentSize.Height -= _contentMargin.Top + _contentMargin.Bottom;

            //_borderContentContainer.Measure(contentSize);
            //_gridContainer.Measure(availableSize);


            double newWidth, newHeight;
            newWidth = _borderContentContainer.ActualWidth + _contentMargin.Left + _contentMargin.Right;
            newHeight = _borderContentContainer.ActualHeight + _contentMargin.Top + _contentMargin.Bottom;

            newWidth = newWidth < _minSize.Width ? _minSize.Width : newWidth;
            newHeight = newHeight < _minSize.Height ? _minSize.Height : newHeight;
            return new Size(newWidth, newHeight);
        }

Kann mir jemand eventuell helfen zu verstehen wie ich die overrides zu verwenden habe damit die größe des controls sich dem inhalt anpasst?

Ok ich glaube ich bin der unerklärlichen höhe des elements auf die schliche gekommen... das bild Image05 liegt in dem GridContainer auf col 1 row 1 die jeweils mit breite/höhe 1* ausgewiesen sind... was dazu führt das ein 5*7 pixel Image auf 259pixel vergrößert wird... ohne Grund.

**++:::