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

C# Discussion :

WPF : Même code, pas même résultat [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut WPF : Même code, pas même résultat
    Bonjour,
    J'ai 2 codes qui me semblent identiques et pourtant je n'ai pas le même rendu...
    J'ai fait un préprojet pour valider un rendu
    Code XML : 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
    <Window x:Class="WpfApp6.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApp6"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <DataTemplate x:Key="ObjectDataTemplate">
                <GroupBox Header="{Binding Name}">
                    <ItemsControl ItemsSource="{Binding Tests}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition SharedSizeGroup="Name"/>
                                        <ColumnDefinition SharedSizeGroup="Value"/>
                                        <ColumnDefinition SharedSizeGroup="Symbol"/>
                                    </Grid.ColumnDefinitions>
                                    <Label Content="{Binding Name}"/>
                                    <TextBox Grid.Column="1" Text="{Binding Value}" HorizontalContentAlignment="Center"/>
                                    <Label Grid.Column="2" Content="{Binding Symbol}"/>
                                </Grid>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </GroupBox>
            </DataTemplate>
            <ItemsPanelTemplate x:Key="GroupPanelTemplate">
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </Window.Resources>
        <ItemsControl Name="Measure"
                      Grid.IsSharedSizeScope="true"
                      ItemsSource="{Binding}"
                      ItemTemplate="{StaticResource ObjectDataTemplate}"
                      ItemsPanel="{StaticResource GroupPanelTemplate}"
                      VerticalAlignment="Center"/>
    </Window>
    Avec le code suivant:
    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
    using System.Windows;
     
    namespace WpfApp6
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                DataContext = new Group[]
                    {
                        new Group
                        {
                            Name = "TestGroup111",
                            Tests = new Test[]
                            {
                                new Test { Name = "Test1", Value = 5, Symbol = "%" },
                                new Test { Name = "Test1Test", Value = 105, Symbol = "mm/s" },
                                new Test { Name = "Test1ff", Value = 15, Symbol = "i" }
                            }
                        },
                        new Group
                        {
                            Name = "TestGroup222",
                            Tests = new Test[]
                            {
                                new Test { Name = "Test2", Value = 25, Symbol = "%" },
                                new Test { Name = "Test2Test", Value = 8, Symbol = "mm/s" },
                                new Test { Name = "Test2ff", Value = 45, Symbol = "i" }
                            }
                        }
                    };
            }
        }
     
        public class Group
        {
            public string Name { get; set; }
            public Test[] Tests { get; set; }
        }
     
        public class Test
        {
            public string Name { get; set; }
            public int Value { get; set; }
            public string Symbol { get; set; }
        }
    }

    Code XML : 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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <UserControl x:Class="DigitalFactory.UserControls.ActiveParametersPage"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 xmlns:local="clr-namespace:DigitalFactory.ViewModels"
                 mc:Ignorable="d">
        <UserControl.DataContext>
            <local:ActiveParametersPageViewModel/>
        </UserControl.DataContext>
     
        <!--<UserControl.Resources>
            <ItemsPanelTemplate x:Key="ItemsPanelTemplateHorizontal">
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
            <DataTemplate x:Key="ParameterInLineTemplate" DataType="{x:Type local:Parameter}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition SharedSizeGroup="Name"/>
                        <ColumnDefinition SharedSizeGroup="Value"/>
                        <ColumnDefinition SharedSizeGroup="Symbol"/>
                    </Grid.ColumnDefinitions>
                    <Label Content="{Binding Name, Converter={StaticResource ParameterConverter}}"/>
                    <TextBox Text="{Binding ParameterInputs.Value}" Grid.Column="1" MinWidth="50" HorizontalContentAlignment="Center"/>
                    <Label Content="{Binding ParameterUnit.Symbol}" Grid.Column="2"/>
                </Grid>
            </DataTemplate>
            <DataTemplate x:Key="ParameterGroupScreenTemplate" DataType="{x:Type local:ParameterGroupScreen}">
                <GroupBox Header="{Binding Name}">
                    <!--<ItemsControl ItemsSource="{Binding Parameters}" ItemTemplate="{StaticResource ParameterInLineTemplate}"/>-->
                    <ItemsControl ItemsSource="{Binding Parameters}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition SharedSizeGroup="Name"/>
                                        <ColumnDefinition SharedSizeGroup="Value"/>
                                        <ColumnDefinition SharedSizeGroup="Symbol"/>
                                    </Grid.ColumnDefinitions>
                                    <Label Content="{Binding Name}"/>
                                    <TextBox Grid.Column="1" Text="{Binding ParameterInputs.Value}" MinWidth="50" HorizontalContentAlignment="Center"/>
                                    <Label Grid.Column="2" Content="{Binding ParameterUnit.Symbol}"/>
                                </Grid>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </GroupBox>
            </DataTemplate>
        </UserControl.Resources>
     
        <ItemsControl Name="ParameterGroups"
                      ItemsSource="{Binding ParameterGroups}"
                      ItemTemplate="{StaticResource ParameterGroupScreenTemplate}"
                      ItemsPanel="{StaticResource ItemsPanelTemplateHorizontal}"
                      Grid.IsSharedSizeScope="True"
                      VerticalContentAlignment="Top"
                      VerticalAlignment="Center"/>-->
        <UserControl.Resources>
            <DataTemplate x:Key="ObjectDataTemplate">
                <GroupBox Header="{Binding Name}">
                    <ItemsControl ItemsSource="{Binding Parameters}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition SharedSizeGroup="Name"/>
                                        <ColumnDefinition SharedSizeGroup="Value"/>
                                        <ColumnDefinition SharedSizeGroup="Symbole"/>
                                    </Grid.ColumnDefinitions>
                                    <Label Content="{Binding Name}"/>
                                    <TextBox Grid.Column="1" Text="{Binding ParameterInputs.Value}" HorizontalContentAlignment="Center"/>
                                    <Label Grid.Column="2" Content="{Binding ParameterUnit.Symbol}"/>
                                </Grid>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </GroupBox>
            </DataTemplate>
            <ItemsPanelTemplate x:Key="GroupPanelTemplate">
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </UserControl.Resources>
        <ItemsControl Name="Measure"
                      Grid.IsSharedSizeScope="true"
                      ItemsSource="{Binding ParameterGroups}"
                      ItemTemplate="{StaticResource ObjectDataTemplate}"
                      ItemsPanel="{StaticResource GroupPanelTemplate}"
                      VerticalAlignment="Center"/>
    </UserControl>
    Avec le code suivant :
    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
    namespace DigitalFactory.ViewModels
    {
        using Objects.Entities;
        using Objects.Entities.Context;
        using Objects.Extensions;
        using Objects.Log;
        using Properties;
        using System;
        using System.Data.Entity;
        using System.Linq;
     
        public class ActiveParametersPageViewModel
        {
            public IOrderedEnumerable<ParameterGroupScreen> ParameterGroups
            {
                get
                {
                        string IHMName = GetType().Name.IHMName();
     
                        using (MachineDBContext resource = new MachineDBContext())
                            return resource.ParameterGroupScreens
                                           .Include(o => o.Parameters.Select(p => p.ParameterInputs))
                                           .Include(o => o.Parameters.Select(p => p.ParameterUnit))
                                           .Where(o => o.Parameters.Any(p => p.ParameterAddresses.Any(q => q.Machine.BusinessReference == Settings.Default.BusinessReference)) &&
                                                       o.PresentationPage.Name == IHMName &&
                                                       o.Parameters.Count > 0)
                                           .ToList()
                                           .OrderBy(o => o.OrderInPage);
                }
            }
        }
    }
    Avec la définition de mes objets :
    Code : 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
    75
    76
    77
    78
    79
    80
    81
    82
    namespace DigitalFactory.Objects.Entities
    {
        using Bases;
        using System;
     
        public class ParameterGroupScreen
        {
            public ParameterGroupScreen () => Parameters = new HashSet<Parameter>();
     
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public Guid ID { get; set; }
     
            [Required]
            [Index(IsUnique = true)]
            [StringLength(50)]
            public string Name { get; set; }
     
            public virtual ICollection<Parameter> Parameters { get; set; }
     
            public int OrderInPage { get; set; }
     
            public Guid PresentationPageID { get; set; }
            public virtual PresentationPage PresentationPage { get; set; }
        }
     
        public class Parameter
        {
            public Parameter()
            {
                ParameterAddresses = new HashSet<ParameterAddress>();
                ParameterFixedValues = new HashSet<ParameterFixedValue>();
                ParameterInputs = new HashSet<ParameterInput>();
                ParameterOutputs = new HashSet<ParameterOutput>();
            }
     
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public Guid ID { get; set; }
     
            [Required]
            [Index(IsUnique = true)]
            [StringLength(50)]
            public string Name { get; set; }
     
            public bool IsAutomaton { get; set; } = true;
     
            public int OrderInGroupScreen { get; set; }
     
            public int OrderInOpcGroup { get; set; }
     
            public Guid ParameterGroupScreenID { get; set; }
            public virtual ParameterGroupScreen ParameterGroupScreen { get; set; }
     
            public Guid ParameterUnitID { get; set; }
            public virtual ParameterUnit ParameterUnit { get; set; }
     
            public virtual ICollection<ParameterInput> ParameterInputs { get; set; }
        }
     
        public class ParameterInput
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public Guid ID { get; set; }
     
            public Guid ParameterID { get; set; }
            public virtual Parameter Parameter { get; set; }
     
            public double Value { get; set; }
        }
     
        public class ParameterUnit
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public Guid ID { get; set; }
     
            public Guid ParameterID { get; set; }
            public virtual Parameter Parameter { get; set; }
     
            [Index(IsUnique = true)]
            [StringLength(15)]
            public string Symbol { get; set; }
        }
    }
    Le premier code me donne le formulaire sur fond blanc, les groupes sont les uns à côté des autres et les paramètres sont les uns en dessous des autres, et le second le formulaire sur fond noir, les groupes et les paramètres sont les uns à côté des autres.

    Nom : Capture.PNG
Affichages : 279
Taille : 48,1 Ko

    Pourtant j'ai les mêmes codes (et en commentaire dans le XAML, l'ancien code que je voulait faire mais qui me donne le même résultat).

    Auriez-vous une idée ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    même code non, le xaml et le cs sont vraiment différents

    le ItemsPanelTemplateHorizontal est en commentaire sur l'un, donc le staticresource ne doit pas le trouver, donc tu n'auras pas un stackpanel horizontal mais vertical
    pour le reste, je vais pas lire 300 lignes de code pour jouer au jeu des 7 différences ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    J'ai repris le code car j'étais sur autre chose et ayant intégré les templates pour d'autres usages, je m'y suis connecté et tout est rentré dans l'ordre... Je n'ai pas cherché où j'avais fait l'erreur, ça marche en ayant une démarche WPF complète.

    Merci quand même.

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

Discussions similaires

  1. [XL-2007] 2 feuilles de calcul même formule pas même resultat
    Par lescuenin45 dans le forum Excel
    Réponses: 6
    Dernier message: 18/05/2016, 15h50
  2. Développer un quiz en Silverlight et WPF en partageant le même code
    Par Louis-Guillaume Morand dans le forum Silverlight
    Réponses: 0
    Dernier message: 07/05/2009, 20h37
  3. Réponses: 3
    Dernier message: 01/08/2006, 14h31
  4. Réponses: 2
    Dernier message: 14/10/2005, 12h14

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