Månedligt arkiv: April 2013

Hurtig og nem: Flytte et rektangel ved hjælp af C# i en Windows Store App

Min generelle blog filosofi er, at det er helt fint at blog om gamle, afgjort emner, der har været dækket til døden andetsteds.  Jeg formoder, dette emne er en af dem, men jeg er blogging det alligevel.

Jeg har arbejdet på et vindue butik app og jeg er på del hvor jeg skal gøre nogle animere.  Til dette formål, Jeg har været at finde ud af bits og stykker af windows gemmer app animation som, da det viser sig, er ganske tæt på, men ikke præcis som, XAML baseret animationer i .NET (Jeg stadig kommer til livs med faktum at WinRT <> .NET 🙂 ).

Her til morgen jeg ønskede at få styr på træk og slip.  På vej til at, Jeg fik kørt ned flytter et rektangel i stedet :).  Her er den kode, der flytter en rektangel, når brugeren klikker på en knap:

   1:   
   2:              MatrixTransform ct = (MatrixTransform)rectBig.RenderTransform;
   3:              Matrix m = ct.Matrix;
   4:              m.OffsetX  = 10;
   5:              m.OffsetY  = 10;
   6:              CT.Matrix = m;
   7:              rectBig.RenderTransform = ct;

Tricket her er at jeg direkte ikke kan ændre OffsetX eller OffsetY.  Der kan være en mere smart måde at gøre dette (og hvis du kender og føler sig som, bedes du sende i kommentarerne). 

For at gøre dette, Jeg har brug for at:

1. Få MatrixTransform af rektanglet (ved at kaste RenderTransform).

2. Få matrixen for at fyr.

3. Ændre den Matrix kompensationskøb.

4. Gentildele Matrix tilbage til MatrixTransform.

5. Gentildele MatrixTransform tilbage til rektanglet.

At teste det., Jeg sætter et rektangel og knappen på skærmen. Når jeg klikker på knappen, den ovenstående logik udfører og flytter rektanglet straks.

På et tidspunkt, Jeg vil gerne animere det men jeg har ingen idé om hvordan man får en DoubleAnimation til at arbejde på det. (Storyboard.SetTargetProperty() bliver et mysterium for mig på dette for tiden).

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Indstille højden af ListboxItems i en ListBox programmatisk til Windows Store App

Jeg arbejder på en Vinduer store programmet og en af de ting, jeg ønsker at gøre i app er vist en log, der viser status beskeder og andre informative lækkerier som brugeren arbejder ting. Til dette formål, Jeg har tilføjet en liste som følger:

<ListBox x:Navn ="GameStateLog" HorizontalAlignment ="Center" Højde ="221" VerticalAlignment ="Toppen" Bredde ="499" Polstring ="0" Skriftstørrelse (FontSize) ="10">

 

C#-kode til at udfylde kontrolelementerne liste på runtime blev i lighed med:

GameStateLog.Items.Insert(0, GameStateCounter    + ": Nye spil tilstand: venter på afspilleren 1 Navn");

Det virkede fint nok men UI viste et vanvittigt beløb af polstring omkring de enkelte meddelelser, som de blev tilføjet. Det giver mening, hvis jeg ønsker slutbrugere at vælge disse emner, men ikke giver mening, når jeg ønsker blot at vise en løbende serie af logmeddelelser-brugere vil ikke vælge disse, bare se dem. Det var mærkeligt nok svært at finde en nem måde at gøre dette og velsagtens, den måde, jeg fandt det ikke nødvendigvis "let", men jeg fik det til at virke OK. Den afgørende indsigt kom fra denne udstationering Her (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c4a6f694-bd46-4779-ab83-b1c2fcb2397c) fra Bob Relyea. I stedet for at tilføje strenge til samlingen elementer på en liste, Tilføj ListBoxItems. Ved at tilføje en streng, ListBox var at skabe sin egen ListBoxItem på sin egen. Jeg var ikke i stand til at påvirke noget om at ListBoxItem efter faktum. Den nye kode er:

        privat void AddGameStateLogMessage(streng theMessage)
        {
            ListBoxItem li = nye ListBoxItem();
            Li.Indhold = theMessage;
            Li.MaxHeight = 25;

            Tykkelse thisPadding = nye Tykkelse(5, 0, 5, 0);
            Li.Polstring = thisPadding;

            GameStateLog.Items.Insert(0,Li);
        }

 

Her jeg opretter Listboxitems og indsætte dem. Jeg fjernet den overskydende polstring ved at angive dens tykkelse.

Dette er temmelig fleksible som jeg agter at gøre nogle farvekodning for at fremhæve bestemte typer af beskeder og ved direkte at ListBoxItems får jeg at style dem jeg vil.

Håb indeværende hjælper nogen!

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin