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 :

PivotTable, ScrollViewer, Comment garder les en-têtes visibles ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut PivotTable, ScrollViewer, Comment garder les en-têtes visibles ?
    Je suis en train de réaliser un usercontrol PivotTable assez simple.
    Simple, parce que je ne gère pour le moment (et c'est pas certain que cela change à l'avenir) que deux axes (X et Y).

    Pour vous donner une idée de ce que ce contrôle fait, voyez dans l'image ci-jointe, une fenêtre comportant dans la partie supérieure le contrôle PivotTable, en action, et dans la partie inférieure une ListBox bindée à une liste d'objets du même type.

    Voici le code de cette fenêtre :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <Window x:Class="PivotTableSample.Window1"
    		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    		xmlns:pt="clr-namespace:nsPivotTable;assembly=PivotTable"
    		xmlns:l="clr-namespace:PivotTableSample"
    		xmlns:s="clr-namespace:System;assembly=mscorlib"
    		Title="Window1">
    	<Window.DataContext>
    		<l:UserCommandCollection>
    			<l:UserCommand />
    			<l:UserCommand />
    			....
    			<l:UserCommand />
    			<l:UserCommand />
    		</l:UserCommandCollection>
    	</Window.DataContext>
    	<Grid>
    		<Grid.RowDefinitions>
    			<RowDefinition />
    			<RowDefinition />
    		</Grid.RowDefinitions>
    		<pt:PivotTable x:Name="pt"
    					   XAxis="CommandName"
    					   YAxis="Username"
    					   BorderBrush="BlueViolet"
    					   BorderThickness="1"
    					   Background="AliceBlue"
    					   ItemsSource="{Binding}"
    					   Margin="5"
    					   Grid.Row="0">
    			<pt:PivotTable.ItemTemplate>
    				<DataTemplate>
    					<ItemsControl ItemsSource="{Binding}">
    						<ItemsControl.ItemsPanel>
    							<ItemsPanelTemplate>
    								<StackPanel Orientation="Horizontal"
    											IsItemsHost="True" />
    							</ItemsPanelTemplate>
    						</ItemsControl.ItemsPanel>
    						<ItemsControl.ItemTemplate>
    							<DataTemplate>
    								<CheckBox IsChecked="{Binding IsAccessible, Mode=TwoWay}"
    										  Margin="5" />
    							</DataTemplate>
    						</ItemsControl.ItemTemplate>
    					</ItemsControl>
    				</DataTemplate>
    			</pt:PivotTable.ItemTemplate>
    			<pt:PivotTable.ColumnHeaderTemplate>
    				<DataTemplate>
    					<Button Content="{Binding}"
    							Click="Button_Click">
    						<Button.LayoutTransform>
    							<RotateTransform Angle="-80" />
    						</Button.LayoutTransform>
    					</Button>
    				</DataTemplate>
    			</pt:PivotTable.ColumnHeaderTemplate>
    		</pt:PivotTable>
    		<ListBox ItemsSource="{Binding}"
    				 Margin="5"
    				 Grid.Row="1">
    			<ListBox.ItemTemplate>
    				<DataTemplate>
    					<TextBlock>
    						<TextBlock Text="{Binding Username}" />
    						<TextBlock Text="{Binding CommandName}" />
    						<TextBlock Text="{Binding IsAccessible}" />
    					</TextBlock>
    				</DataTemplate>
    			</ListBox.ItemTemplate>
    		</ListBox>
    	</Grid>
    </Window>

    Pour réaliser ce truc, j'ai créé un panel, DynamicGrid, qui agit un peu comme une Grid toute simple, excepté qu'il n'est pas nécessaire de définir les ColumnDefinitions et les RowDefinitions.

    Cette DynamicGrid est encapsulée dans un ScrollViewer... Seulement voilà : comme toutes les données de la DynamicGrid sont dans le ScrollViewer et que les en-têtes font partie de cette DynamicGrid, et bien, c'est foutu.
    Pas moyen de garantir que les en-têtes seront toujours visibles quand un utilisateur scrollera...

    Bref, j'ai plus qu'à casser la DynamicGrid pour y ajouter des en-têtes (plan foireux) ou bien plus qu'à mettre en place un système de SharedGridSize comme la Grid le fait...
    Galère.

    Bon, du coup, ce post n'a plus forcément trop d'intérêt, à part me parler tout seul et vous tenir au courant de ce petit contrôle bien sympathique.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    A défaut d'apporter une réponse, vu que tu en a déjà trouvé, j'aimerais bien savoir comment se finit cette histoire, ce composant à l'air bien intéressant :p
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Essaie de regarder la structure utilisée par les contrôles GridView et/ou DataGrid (avec des outils genre Snoop ou Show Me The Template par exemple), ça te donnera peut-être des indications sur l'approche à adopter

  4. #4
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Le scrolling est réglé, ainsi que les groupdescriptions. Les SortDescriptions fonctionnaient déjà avant, c'est juste que je ne l'avais pas utilisé dans la démo.

    Démo, visible ici, d'ailleurs : http://www.dailymotion.com/video/xa5...rolspivottable

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    beau boulot !

    ça marche juste avec des checkbox ou on peut mettre n'importe quoi ?

    EDIT: oublie ma question, la réponse est dans ton code du premier post...

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Petit update, le contrôle est terminé.

    http://www.dailymotion.com/video/xa7...vottable-final

Discussions similaires

  1. Comment garder les dates les plus récentes?
    Par nikobell dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/06/2007, 10h06
  2. Réponses: 5
    Dernier message: 29/08/2006, 19h02
  3. Réponses: 1
    Dernier message: 04/06/2006, 00h35
  4. [Mail] Comment garder les mails envoyés?
    Par JSuper_Kitten dans le forum Langage
    Réponses: 5
    Dernier message: 16/10/2005, 14h00
  5. Comment garder les anciens messages Outlook
    Par titof dans le forum Outlook
    Réponses: 2
    Dernier message: 19/05/2005, 14h44

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