IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Composant pour ajouter des éléments en lignes


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 73
    Points
    73
    Par défaut Composant pour ajouter des éléments en lignes
    Bonjour à tous,

    J'ai des petits composants graphiques (des images d'environ 30x30) que je voudrais ajouter dans un composant type ListBox. Seulement le problème c'est que si je prend un ListBox, j'aurai une image par ligne et donc si j'ai beaucoup d'image c'est vite la galère...

    Je voulais donc savoir s'il existe un composant, un peu comme un JPanel en Java, auquel on ajoute des éléments et qui, quand on arrive à la largeur max du composant, "retourne à la ligne".

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 73
    Points
    73
    Par défaut
    Je crois avoir trouvé une réponse à ma question par le contrôle "WrapPanel"... Je vais faire quelques essais...

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut, c'est en effet de ce coté qu'il faut regarder. Pour t'aider un peu plus, il faut jouer sur l'ItempPanel :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Setter Property="ItemsPanel">
      <Setter.Value>
        <ItemsPanelTemplate>
          <WrapPanel />
        </ItemsPanelTemplate>
      </Setter.Value>
    </Setter>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 73
    Points
    73
    Par défaut
    Après une pose déjeuner, tout va mieux
    Je viens d'avoir la même idée puisque j'ai trouvé il y a peu la façon d'organiser les éléments d'une ListBox horizontalement :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ListBox ItemsSource="{Binding Models.SelectedModel.Areas}"
             ItemTemplate="{StaticResource areaLegendItem}" 
             VerticalContentAlignment="Top">
           <ListBox.ItemsPanel>
                  <ItemsPanelTemplate>
                         <StackPanel Orientation="Horizontal" />
                  </ItemsPanelTemplate>
           </ListBox.ItemsPanel>
    </ListBox>

    Avec un peu de bol ça fonctionnera avec un WrapPanel

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Ouep. C'est bien ça .

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 73
    Points
    73
    Par défaut
    Après quelques petits tests, ça marche nickel

    Par contre j'ai un petit soucis : j'affiche des images dans ma listbox.
    Seulement je ne veux pas les afficher en taille réelle, je ne veux afficher que des miniatures. Je crée une liste d'objets "PictureDescVM".

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class PictureDescVM : ViewModelBase
        {
            private string _path;
            private BitmapSource _bitmapSource;
     
            public PictureDescVM(string path){
                _path = path;
                _bitmapSource = new BitmapImage(new Uri(_path, UriKind.Relative)); ;
            }
     
            public string Path{ get { return _path; } }
     
            public BitmapSource BitmapSource{ get { return _bitmapSource; } }
        }

    Je les lie ensuite aux objets de ma ListBox par DataTemplate
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DataTemplate x:Key="PictureTemplate">
                <Image Source="{Binding BitmapSource}" Width="20" Height="20" />
            </DataTemplate>
    Là dans ma ListBox, j'ai bien plein de carré 20x20 les uns à coté des autres, mais rien dedans... Pas d'erreur dans la sortie de VS, si je met un point d'arrêt sur la propriété "BitmapSource", on passe bien dedans...

    Par contre, quand j'accède à "BitmapSource.PixelWidth", l'image s'affiche bien... Du coup je suis obligé de faire mon sioux et de limiter avec MaxWidth :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DataTemplate x:Key="PictureTemplate">
                <Image Source="{Binding BitmapSource}" Width="{Binding BitmapSource.PixelWidth}" Height="20" MaxWidth="20" />
            </DataTemplate>

    Si j'essaye de passer "BitmapSource.PixelWidth" dans un convertisseur pour multiplier par 0.5 par exemple, ça me sort 234 (j'ai 234 images...) exceptions dans la console (et on ne passe pas dans la fonction Convert du-dit convertisseur) :
    System.Windows.Data Error: 17 : Cannot get 'PixelWidth' value (type 'Int32') from 'BitmapSource' (type 'BitmapImage'). BindingExpressionath=BitmapSource.PixelWidth; DataItem='PictureDescVM' (HashCode=40050212); target element is 'Image' (Name=''); target property is 'Width' (type 'Double') TargetInvocationException:'System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.IO.IOException: Impossible de trouver la ressource 'view/custsymb/r11.bmp'.
    à MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
    ..........
    Donc ça marche mais c'est vraiment étrange que je sois obligé d'accéder à PixelWidth pour afficher l'image...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete pour ajouter des lignes à ma table
    Par dodo91 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2009, 10h34
  2. Réponses: 4
    Dernier message: 25/11/2005, 11h25
  3. Recherche de composant pour tracer des lignes
    Par n1portki dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/09/2005, 01h44
  4. Ajouter des éléments à ListBox
    Par priest69 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2005, 14h05
  5. script pour ajouter des utilisateurs postgres
    Par xopos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 16/08/2004, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo