none
problème dans les fichiers xaml avec VS2010 SP1 RRS feed

  • Question

  • Bonjour,

    Depuis que j'ai installé le SP1 de visual studio, je ne peux plus modifier mes fichiers xaml en mode de design. J'ai systématiquement une erreur:" NullReferenceException a été levée dans "ControlTemplate":la référence d'objet n'est pas définie à une instance d'objet"

    Le problème n'apparait pas sur les machines qui n'ont pas le SP1 et disparait si on désinstalle le SP1.

    Quelqu'un a -t-il rencontré ce type de problème?

    mardi 6 mars 2012 16:53

Toutes les réponses

  • Bonjour,

    C'est juste que c'est le designer qui est un peu plus sensible.

    Pour eviter cela c'est assez compliqué, cela peut-être le constructeur qui à un paramètre null ou un datacontext null.

    Si le code n'est pas trop long pouvez vous montrer votre code xaml et .cs d'un des fichiers xaml. Pour que je puisse vous montrer comment le contourner.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mardi 20 mars 2012 12:43
    Modérateur
  • Bonjour,

    Voici comment s'articulent mes fichiers. J'ai un fichier UCListe.cs (sans xaml associé) qui déclare un certain nombre de méthodes qui seront appelées dans les UserControl qui héritent de UCListe:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using ClassesAidomenu;
    using Infragistics.Windows.Ribbon;
    using Infragistics.Windows.DockManager.Events;
    
    namespace Interfaces
    {
            public class UCListe : UserControl
        {
            public AidomenuObjet Aidomenuobjet = null;
            public Dictionary<object, Visibility> listeObject = null;
            public Dictionary<Type, Dictionary<object, Visibility>> listeComposants = null;
    
            public UCListe()
            {
                listeComposants = new Dictionary<Type, Dictionary<object, Visibility>>();
                listeObject = new Dictionary<object, System.Windows.Visibility>();
                this.Loaded += new RoutedEventHandler(UCListe_Loaded);
                this.Unloaded += new RoutedEventHandler(UCListe_Unloaded);
            }
    
            void UCListe_Unloaded(object sender, RoutedEventArgs e)
            {
                if (Execute())
                {
                    listeComposants.Clear();
                   ...
                    MiseAJourInterface();
                }
            }
    
            void UCListe_Loaded(object sender, RoutedEventArgs e)
            {            
                if (Execute())
                {
                    listeComposants.Clear();
                   ...
                    MiseAJourInterface();
                }
            }
    }

    Ensuite, j'ai des fichiers xaml qui héritent de UCListe:

    <local:UCListe x:Class="Interfaces.UserControlListe"  
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:Interfaces"
                 mc:Ignorable="d"           
                 xmlns:igDP="http://infragistics.com/DataPresenter"             
                 x:Name="UcListe" MouseDoubleClick="UcListe_MouseDoubleClick">
        <Grid Width="Auto" Height="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" x:Name="GrillePrincipal">
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition/>            
            </Grid.RowDefinitions>
            <Grid.Resources>
                           
                <igDP:FieldSettings x:Key="GrilleDefaut" LabelTextWrapping="Wrap"   SummaryDisplayArea="BottomFixed" AllowEdit="False" AllowSummaries="True" LabelClickAction="SortByMultipleFields"/>
    
            </Grid.Resources>
            <igDP:XamDataGrid AutoFit="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch"
                              IsUndoEnabled="True" Name="DataGridListe" OverridesDefaultStyle="False" VerticalContentAlignment="Stretch"                          
                              Grid.Row="1">
                
                <igDP:XamDataGrid.Resources>
                    <Style x:Key="PrincipalCellStyle" TargetType="{x:Type igDP:CellValuePresenter}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                                    <!--<Image x:Name="img" Source="Images/ico-listeperso.png" Width="16" Height="16"/>-->
                                    <Image x:Name="img" Width="16" Height="16"/>
                                    <ControlTemplate.Triggers>
                                        <DataTrigger Binding="{Binding Path=DataItem.TypeEtab.NomPublic}" Value="Si&#232;ge et &#233;tablissement principal">
                                            <Setter TargetName="img" Property="Source" Value="../Images/ico-principal.png" />
                                        </DataTrigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>                           
                    
                </igDP:XamDataGrid.Resources>
                
                <igDP:XamDataGrid.FieldLayoutSettings>
                    <igDP:FieldLayoutSettings AutoGenerateFields="False" FilterUIType="FilterRecord" HighlightAlternateRecords="True"
                                               HeaderPrefixAreaDisplayMode="None"/>
    
                </igDP:XamDataGrid.FieldLayoutSettings>
                <igDP:XamDataGrid.FieldLayouts>
                    <igDP:FieldLayout FieldSettings="{StaticResource GrilleDefaut}" x:Name="xamFieldLayouts">                    
    
                        <igDP:UnboundField Name="Principal" Label="" Visibility="Collapsed">
                            <igDP:UnboundField.Settings>
                                <igDP:FieldSettings CellValuePresenterStyle="{StaticResource PrincipalCellStyle}" LabelClickAction="Nothing" LabelMaxWidth="60" CellMaxWidth="60"/>
                            </igDP:UnboundField.Settings>
                        </igDP:UnboundField>
                        
                        <igDP:Field Label="Identifiant" Name="ID" Visibility="Collapsed">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings CellClickAction="SelectRecord" AllowEdit="False" AutoSizeOptions="All" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:Field Label="Nom" Name="NomPublic">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings CellClickAction="SelectRecord"  AllowGroupBy="True" AllowResize="True" AutoSizeOptions="All" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:Field Label="Abreviation" Name="Abreviation" Visibility="Collapsed">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings CellClickAction="SelectRecord"  AllowGroupBy="True" AllowResize="True" AutoSizeOptions="All" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                    </igDP:FieldLayout>
                </igDP:XamDataGrid.FieldLayouts>
            </igDP:XamDataGrid>
        </Grid>
    </local:UCListe>
    

    avec le fichier .cs associé:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using ClassesAidomenu;
    using Infragistics.Windows.Editors;
    using Infragistics.Windows.DataPresenter;
    
    namespace Interfaces
    {
        /// <summary>
        /// Logique d'interaction pour UserControlListe.xaml
        /// </summary>
        public partial class UserControlListe : UCListe
        {
    
                   public object leparent;        
    
            public UserControlListe()
            {
                InitializeComponent();
                                  
            }        
     public void Verrouille(Boolean verrou)
            {
                DataGridListe.FieldLayouts[0].FieldSettings.AllowEdit = !verrou;
            }
    }          
    
    Cordialement
    mercredi 21 mars 2012 15:24
  • Je ne vois rien de particulier dans votre code.

    Mais je ne connais pas les composants infragistics.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    dimanche 25 mars 2012 18:52
    Modérateur