Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Silverlight ArrangeOverride/MeasureOverride
KainPlan
myCSharp.de - Member



Dabei seit:
Beiträge: 133
Herkunft: Gelsenkirchen

Themenstarter:

Silverlight ArrangeOverride/MeasureOverride

beantworten | zitieren | melden

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.

das war's...
habe nun die Image elemente durch Border ersetzt und einfach einen ImageBrush als Background verwendet. jetzt wird das element in erwarteter größe dargestellt..
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von KainPlan am .
Attachments
private Nachricht | Beiträge des Benutzers