Archives mensuelles: Avril 2013

Facile et rapide: Déplacer un Rectangle en utilisant c# dans une appli Windows Store

Ma philosophie globale de blog, c'est qu'il est parfaitement bien pour blog sur les vieux, réglé des sujets qui ont été couverts à mort ailleurs.  Je suppose que ce sujet est un de ces, mais je suis blogging il toute façon.

J'ai travaillé sur un app store de fenêtre, et je suis à la partie où je dois faire une animation.  À cette fin, J'ai été figurant des bouts et de stockent des morceaux de windows animation app qui, Il s'avère que, est assez proche de, mais pas exactement comme, Animations de XAML basé dans .NET (Je suis encore à venir à bout avec le fait que WinRT <> .NET 🙂 ).

Ce matin j'ai voulu obtenir une poignée sur le glisser et déposer des opérations.  En route vers qui, Je me suis embourbé déplacer un rectangle à la place :).  Voici le code qui déplace un rectangle lorsque l'utilisateur clique sur un bouton:

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

L'astuce ici est que je ne peux pas changer directement OffsetX ou OffsetY.  Il peut y avoir un moyen plus astucieux de le faire (et si vous connaissez et que vous sentez comme, Merci de poster dans les commentaires). 

Pour ce faire, J'ai besoin de:

1. Obtenez le MatrixTransform du rectangle (en effectuant un cast RenderTransform).

2. Récupère la matrice de ce gars.

3. Changer les décalages de la matrice.

4. Réaffecter la matrice à MatrixTransform.

5. Réaffecter le MatrixTransform retour au Rectangle.

Pour le tester, J'ai mis un rectangle et bouton à l'écran. Lorsque je clique sur le bouton, la logique ci-dessus s'exécute et déplace le rectangle immédiatement.

À un certain moment, J'aimerais animer cela mais je n'ai aucune idée de comment obtenir une DoubleAnimation pour travailler dessus (Storyboard.SetTargetProperty() fait d'être un mystère pour moi là-dessus pour le moment).

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Paramètre la hauteur de ListboxItems dans une zone de liste par programme pour App Store de Windows

Je travaille sur une application de windows store et une des choses que je veux faire dans le soft est un journal qui affiche les messages d'État et autres bribes d'information que l'utilisateur travaille choses d'affichage. À cette fin, J'ai ajouté un ListBox comme suit:

<ListBox x:Nom ="GameStateLog" HorizontalAlignment ="Centre" Hauteur ="221" VerticalAlignment ="Retour au début" Largeur ="499" Rembourrage ="0" FontSize ="10">

 

Le code c# pour remplir la zone de liste lors de l'exécution a été le long des lignes de:

GameStateLog.Items.Insert(0, GameStateCounter    + ": Nouveau jeu de l'État: attente pour joueur 1 nom");

Cela a fonctionné très bien, assez, mais l'interface utilisateur a montré une quantité folle de rembourrage autour des messages individuels, ils ont été ajoutés. C'est logique, si je veux des utilisateurs finaux pour pouvoir sélectionner ces éléments, mais ne fait pas de sens quand je veux juste montrer une série de messages du journal-les utilisateurs ne sélectionnent ces, Tout afficher. Il était étrangement difficile de trouver un moyen facile de le faire et sans doute, la façon dont je l'ai trouvé n'est pas nécessairement « facile », mais j'ai eu fonctionne OK. L'idée clée provenait de cette annonce ici (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c4a6f694-bd46-4779-ab83-b1c2fcb2397c) de Bob Relyea. Au lieu d'ajouter des chaînes à la collection d'éléments dans ListBox, Ajouter ListBoxItems. En ajoutant une chaîne, la zone de liste créait sa propre ListBoxItem sur ses propres. Je n'étais pas en mesure d'affecter quelque chose que ListBoxItem après coup. Le nouveau code est:

        privé VOID AddGameStateLogMessage(chaîne Lemessage)
        {
            ListBoxItem li = Nouveau ListBoxItem();
            Li.Content = lemessage;
            Li.MaxHeight = 25;

            Épaisseur thisPadding = Nouveau Épaisseur(5, 0, 5, 0);
            Li.Rembourrage = thisPadding;

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

 

Ici je suis la création de ListBoxItem et en les insérant. J'ai enlevé le rembourrage excès en définissant son épaisseur.

C'est assez souple car je ne veux pas faire quelque codage en couleurs pour mettre en évidence certains types de messages et en ajoutant directement ListBoxItems, j'arrive à leur style tout comme je le veux.

Espérons que cela aide quelqu'un!

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin