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

Silverlight Discussion :

zoomer sur un graphique


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Par défaut zoomer sur un graphique
    Bonjour;

    je souhaite réaliser un zoom sur mon graphe, pour le moment je l' ai fait au clic de la souri mais par la suite il sera fait suivant la molette de la souri;

    j' ai trouvé qu' il etait possible de le faire grace au ScaleTransform:

    http://msdn.microsoft.com/fr-fr/maga...164249.aspx#S5

    et

    http://msdn.microsoft.com/en-us/libr...=vs.95%29.aspx

    j' ai un probleme lors de l' execution de ma fonction, voici le code coté XAML:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            <toolkit:Chart x:Name="graphgeneral" MouseLeftButtonDown="nombre_MouseLeftButtonDown" ScrollViewer.VerticalScrollBarVisibility="Auto">
     
                <toolkit:ColumnSeries x:Name="nombre" Title="Population" ItemsSource="{Binding ElementName=populationDomainDataSource, Path=Data}" DependentValueBinding="{Binding Path=Nombre}" IndependentValueBinding="{Binding Path=Lieu}" IsSelectionEnabled="True" ScrollViewer.VerticalScrollBarVisibility="Auto">
                    <toolkit:ColumnSeries.RenderTransform>
                        <ScaleTransform x:Name="zoomgraphe" ScaleX="1" ScaleY="1"/>
                    </toolkit:ColumnSeries.RenderTransform>
                </toolkit:ColumnSeries>

    et coté c#:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            private void nombre_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                double zoom = 1;
                zoom = zoom * 1.25;
     
                if(zoomgraphe!=null)
                zoomgraphe.ScaleY = zoom;
     
            }

    Le problème c' est qu' il me trouve toujours mon ScaleTransfor comme null donc il me fait pas la modification.

    De plus, lorsque je met les valeurs en dur, il m' augmente la taille de mon graphe mais les colonnes "sorte du graphe alors que je souhaite que l' axe Y change d' échelle.

    Comment faire?

    Merci;

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Par défaut
    bonjour,

    j' ai trouvé ce que je voulais sur le site des toolseries:

    http://www.silverlight.net/content/s...n/default.html

    dans DataVisualization et l' onglet zoom.

    par contre je ne comprend pas leur code, j' ai tenté de l' adapter par rapport a ce que j' ai, voici mon xaml :

    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
        <Grid x:Name="LayoutRoot">
     
            <Grid.Resources>
               <local:Population x:Key="Population"/>
            </Grid.Resources>
     
                <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}">
     
                <StackPanel>
     
                    <ScrollViewer x:Name="ScrollArea" BorderThickness="0" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
                        <chartingPrimitiveToolkit:EdgePanel x:Name="ChartArea">
                            <Grid Canvas.ZIndex="-1" />
                            <Border Canvas.ZIndex="1" BorderBrush="#FF919191" BorderThickness="1"/>
                        </chartingPrimitiveToolkit:EdgePanel>
                    </ScrollViewer>
     
                    <charting:Chart x:Name="chart" Title="population de test" Height="480" Width="640" MouseWheel="Chart_MouseWheel">
                        <charting:ColumnSeries x:Name="columnnombre" Title="population" ItemsSource="{StaticResource Population}" 
                                                IndependentValueBinding="{Binding Lieu}" 
                                                DependentValueBinding="{Binding Nombre}" AnimationSequence="FirstToLast" />
     
     
                        <charting:LineSeries x:Name="columnenfant" Title="enfant" ItemsSource="{StaticResource Population}" 
                                                IndependentValueBinding="{Binding Lieu}" 
                                                DependentValueBinding="{Binding Enfant}" />
     
                    </charting:Chart>
     
                </StackPanel>
            </ScrollViewer>
        </Grid>

    et mon c#:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            private void Chart_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
            {
                double test = chart.Height;
     
                chart.Height = test + e.Delta;
            }

    Mais ça ne fonctionne pas, c' est le graphe entier qui s' agrandi et je ne comprend pas pourquoi sur l' exemple toolkit il n' y a que la zone du graphique qui s' agrandi.

    Si quelqu'un peut m' expliquer ce qu' il me manque.

    Merci.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Le problème c'est qu'il faut utiliser leurs astuces en tant que template pour ton chart.
    Essaye un truc du genre : ( Non testé!)

    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
        <UserControl.Resources>
            <ControlTemplate TargetType="chartingToolkit:Chart" x:Key="ZoomChartTemplate">
                <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="5">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
     
                        <visualizationToolkit:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}"/>
     
                        <Grid Grid.Row="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
     
                            <visualizationToolkit:Legend x:Name="Legend" Header="{TemplateBinding LegendTitle}" Style="{TemplateBinding LegendStyle}" Grid.Column="1"/>
     
                            <ScrollViewer x:Name="ScrollArea" BorderThickness="0" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
                                <chartingPrimitivesToolkit:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}">
                                    <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}"/>
                                    <Border Canvas.ZIndex="1" BorderBrush="#FF919191" BorderThickness="1"/>
                                </chartingPrimitivesToolkit:EdgePanel>
                            </ScrollViewer>
                        </Grid>
                    </Grid>
                </Border>
            </ControlTemplate>
     
        </UserControl.Resources>
    <charting:Chart x:Name="chart" Template="{StaticResource ZoomChartTemplate}" Title="population de test" Height="480" Width="640" MouseWheel="Chart_MouseWheel">
                        <charting:ColumnSeries x:Name="columnnombre" Title="population" ItemsSource="{StaticResource Population}" 
                                                IndependentValueBinding="{Binding Lieu}" 
                                                DependentValueBinding="{Binding Nombre}" AnimationSequence="FirstToLast" />
     
     
                        <charting:LineSeries x:Name="columnenfant" Title="enfant" ItemsSource="{StaticResource Population}" 
                                                IndependentValueBinding="{Binding Lieu}" 
                                                DependentValueBinding="{Binding Enfant}" />
     
                    </charting:Chart>

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Par défaut
    Bonjour,

    j' ai un problème car il ne me trouve pas l'élément "ChartArea" quand je demande le zoom en c# :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            private void Chart_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
            {
                double test = ChartArea.Width;
     
     
                ChartArea.Width = test + e.Delta;
            }

    quand j' ajoute la fonction private Panel ChartArea (comme dans l' exemple toolkit):

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private Panel ChartArea
            {
                get
                {
                    if (ChartArea == null)
                    {
                        ChartArea = GetLogicalChildrenBreadthFirst(chart).Where(element => element.Name.Equals("ChartArea")).FirstOrDefault() as Panel;
                    }
     
                    return ChartArea;
                }
            }

    il me dit que
    Le nom 'GetLogicalChildrenBreadthFirst' n'existe pas dans le contexte actuel.

    apres concernant ton code, je voudrais savoir a quoi sert le

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <Grid.ColumnDefinitions>
           <ColumnDefinition Width="*"/>
           <ColumnDefinition Width="Auto"/>
       </Grid.ColumnDefinitions>
    et
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <Grid.RowDefinitions>
           <RowDefinition Height="Auto"/>
           <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

    Merci.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Par défaut
    bon,

    alors le code a marché, j' ai modifié le c#:

    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
    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
            private Panel ChartArea
            {
                get
                {
                    if (chartArea == null)
                    {
                        chartArea = GetLogicalChildrenBreadthFirst(graphgeneral).Where(element => element.Name.Equals("ChartArea")).FirstOrDefault() as Panel;
                    }
     
                    return chartArea;
                }
            }
     
            private ScrollViewer ScrollArea
            {
                get
                {
                    if (scrollArea == null)
                    {
                        scrollArea = GetLogicalChildrenBreadthFirst(graphgeneral).Where(element => element.Name.Equals("ScrollArea")).FirstOrDefault() as ScrollViewer;
                    }
                    return scrollArea;
                }
            }
            private IEnumerable<FrameworkElement> GetLogicalChildrenBreadthFirst(FrameworkElement parent)
            {
                Debug.Assert(parent != null, "The parent cannot be null.");
     
                Queue<FrameworkElement> queue =
                    new Queue<FrameworkElement>(GetVisualChildren(parent).OfType<FrameworkElement>());
     
                while (queue.Count > 0)
                {
                    FrameworkElement element = queue.Dequeue();
                    yield return element;
     
                    foreach (FrameworkElement visualChild in GetVisualChildren(element).OfType<FrameworkElement>())
                    {
                        queue.Enqueue(visualChild);
                    }
                }
            }
            private IEnumerable<DependencyObject> GetVisualChildren(DependencyObject parent)
            {
                Debug.Assert(parent != null, "The parent cannot be null.");
     
                int childCount = VisualTreeHelper.GetChildrenCount(parent);
                for (int counter = 0; counter < childCount; counter++)
                {
                    yield return VisualTreeHelper.GetChild(parent, counter);
                }
            }
     
            private void nombre_MouseWheel(object sender, MouseWheelEventArgs e)
            {
                Debug.Assert(ChartArea != null && ScrollArea != null, "Zoom should not be called before layout has occurred");
     
     
                double test = chartArea.Width;
     
     
     
                chartArea.Width = chartArea.Height = test + e.Delta;
            }


    Le problème c' est que je récupere l' item sélectionné dans le graphique pour en créer un autre:


    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
            <Grid.Resources>
                <local:ElementToList x:Key="ElementToList" />
            </Grid.Resources>
     
            <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:Population, CreateList=true}" Height="0" LoadedData="populationDomainDataSource_LoadedData_1" Name="populationDomainDataSource" QueryName="GetPopulationQuery" Width="0">
                <riaControls:DomainDataSource.DomainContext>
                    <my:PopulationContext />
                </riaControls:DomainDataSource.DomainContext>
            </riaControls:DomainDataSource>
     
     
            <toolkit:Chart x:Name="graphgeneral"  Template="{StaticResource ZoomChartTemplate}" MouseWheel="nombre_MouseWheel" MouseEnter="graphgeneral_MouseEnter">
     
                <toolkit:ColumnSeries x:Name="nombre" Title="Population" ItemsSource="{Binding ElementName=populationDomainDataSource, Path=Data}" DependentValueBinding="{Binding Path=Nombre}" IndependentValueBinding="{Binding Path=Lieu}" IsSelectionEnabled="True" ScrollViewer.VerticalScrollBarVisibility="Auto" AnimationSequence="FirstToLast" SelectionChanged="SelectionChanged" />
                <toolkit:LineSeries x:Name="enfant" Title="Enfant" ItemsSource="{Binding ElementName=populationDomainDataSource, Path=Data}" DependentValueBinding="{Binding Path=Enfant}" IndependentValueBinding="{Binding Path=Lieu}" IsSelectionEnabled="True" SelectionChanged="SelectionChanged"/>
     
            </toolkit:Chart>
     
     
            <toolkit:Chart x:Name="graphville" Visibility="Collapsed" MouseLeftButtonDown="graphville_MouseLeftButtonDown">
                <toolkit:PieSeries x:Name="ville"
                                   ItemsSource="{Binding ElementName=nombre, Path=SelectedItem, Converter={StaticResource ElementToList}}"
                                   IndependentValueBinding="{Binding Path=Name}"
                                   DependentValueBinding="{Binding Path=Nombre}"/>
            </toolkit:Chart>

    dès que je rajoute:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    Template="{StaticResource ZoomChartTemplate}"

    a mon graphique, le deuxième ne récupère pas les valeurs,
    je ne comprend pas pourquoi c' est modifié.

    Merci.

Discussions similaires

  1. Zoom sur un graphique
    Par MeDioN dans le forum 2D
    Réponses: 9
    Dernier message: 16/01/2006, 11h42
  2. [MFC Visual C++]conseil sur affichage graphiques
    Par C++beginner dans le forum MFC
    Réponses: 6
    Dernier message: 10/01/2006, 06h47
  3. [VB.Net] Comment effacer des traits sur un graphique ?
    Par bert24 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/09/2005, 14h20
  4. [CR 8.5] Attribution couleur sur un graphique
    Par Silvinho42 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 30/06/2005, 15h00
  5. Zoomer sur un JPanel
    Par hina dans le forum 2D
    Réponses: 3
    Dernier message: 28/04/2005, 10h46

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