Bonjour,

J'ai encore un petit problème, quand je veux afficher un contrôle custom, je reçois une exception de type XamlParseException (ligne:0 colonne:0).
Celle-ci ne se produit que pour un contrôle mais je n'arrive pas à trouver l'origine de celui-ci et ce même en utilisant le debugger.

Voici le xaml du composant :
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
<Style TargetType="local:EventNotifierControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:EventNotifierControl">
                    <Canvas x:Name="EventNotifierPanel"
                                Background="{TemplateBinding Background}"
                                Opacity="{TemplateBinding Opacity}"
                                Height="{TemplateBinding Height}"
                                Width="{TemplateBinding Width}">
 
                        <vsm:VisualStateManager.VisualStateGroups>
                            <vsm:VisualStateGroup x:Name="NotificationEvent">
                                <vsm:VisualState x:Name="NotifyAnimation">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="EventIcon" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
                                            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.150" Value="-20"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.300" Value="0"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.450" Value="-15"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.600" Value="0"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.750" Value="-10"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:00.900" Value="0"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:01.050" Value="-5"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:01.200" Value="0"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:01.350" Value="-2.5"/>
                                            <SplineDoubleKeyFrame KeyTime="00:00:01.500" Value="0"/>
                                        </DoubleAnimationUsingKeyFrames>
                                    </Storyboard>
                                </vsm:VisualState>
                            </vsm:VisualStateGroup>
                        </vsm:VisualStateManager.VisualStateGroups>
 
 
                        <Button x:Name="EventAction">
                            <Image Width="{TemplateBinding Width}" 
                                   Height="{TemplateBinding Height}" 
                                   Source="{TemplateBinding IconSrc}" 
                                   Stretch="Fill" 
                                   x:Name="EventIcon" 
                                   RenderTransformOrigin="0.5,0.5">
 
                                <Image.RenderTransform>
                                    <TransformGroup>
                                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                                        <SkewTransform AngleX="0" AngleY="0"/>
                                        <RotateTransform Angle="0"/>
                                        <TranslateTransform X="0" Y="0"/>
                                    </TransformGroup>
                                </Image.RenderTransform>
 
                            </Image>
                        </Button>
 
                        <Image Width="{TemplateBinding Width}" 
                               Height="{TemplateBinding Height}" 
                               Source="{TemplateBinding IndicatorNumberSrc}" 
                               Stretch="Fill"
                               Visibility="{TemplateBinding IndicatorVisibility}"
                               x:Name="EventNumberLogo"></Image>
 
                        <TextBlock Width="25" 
                                 Height="25"
                                 x:Name="EventNumber"
                                 Foreground="White"
                                 FontSize="12"                                 
                                 Visibility="{TemplateBinding IndicatorVisibility}"></TextBlock>
 
                    </Canvas>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
La classe qui lui est associée :
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
 
<TemplatePart(Name:="EventNotifierPanel", Type:=GetType(FrameworkElement))> _
<TemplatePart(Name:="EventAction", Type:=GetType(Button))> _
<TemplatePart(Name:="EventIcon", Type:=GetType(Image))> _
<TemplatePart(Name:="EventNumberLogo", Type:=GetType(Image))> _
<TemplatePart(Name:="EventNumber", Type:=GetType(TextBlock))> _
<TemplateVisualStateAttribute(Name:="NotifyAnimation", GroupName:="NotificationEvent")> _
Public Class EventNotifierControl
    Inherits ContentControl
 
#Region "Propriétées"
 
    Private Const RootElement As String = "EventNotifierPanel"
    Private Const EventNumLogo As String = "EventNumberLogo"
    Private Const EventNum As String = "EventNumber"
    Private Const EventAction As String = "EventAction"
    Private Const NotifyAnimation As String = "NotifyAnimation"
    Private Const EventIcon As String = "EventIcon"
 
    Private m_RootElement As FrameworkElement = Nothing
    Private m_EventNumberImg As Image = Nothing
    Private m_EventNumberTxtBlock As TextBlock = Nothing
    Private m_EventActionBtn As Button = Nothing
 
#Region "Dependecies"
 
    'IconSrc (indique l'icon a afficher)
    Public Shared ReadOnly IconSrcProperty As DependencyProperty = _
        DependencyProperty.Register("IconSrc", GetType(ImageSource), _
                                    GetType(EventNotifierControl), Nothing)
 
    'IndicatorNumberSrc (indique l'image a afficher pour contenir le nombre d'event)
    Public Shared ReadOnly IndicatorNumberSrcProperty As DependencyProperty = _
        DependencyProperty.Register("IndicatorNumberSrc", GetType(ImageSource), _
                                    GetType(EventNotifierControl), Nothing)
 
    'IndicatorVisibility (indique si on doit afficher le nombre d'event)
    Public Shared ReadOnly IndicatorVisibilityProperty As DependencyProperty = _
        DependencyProperty.Register("IndicatorVisibility", GetType(Visibility), _
                                    GetType(EventNotifierControl), Nothing)
 
#End Region
 
    Public Event Click As RoutedEventHandler
 
#End Region
 
#Region "Accesseurs"
 
    ''' <summary>
    ''' Obtient ou définie l'icon a afficher
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property IconSrc() As ImageSource
        Get
            Return DirectCast(GetValue(IconSrcProperty), ImageSource)
        End Get
        Set(ByVal value As ImageSource)
            SetValue(IconSrcProperty, value)
        End Set
    End Property
 
    ''' <summary>
    ''' Obtient ou définie l'image contenant le nombre d'evenement
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property IndicatorNumberSrc() As ImageSource
        Get
            Return DirectCast(GetValue(IndicatorNumberSrcProperty), ImageSource)
        End Get
        Set(ByVal value As ImageSource)
            SetValue(IndicatorNumberSrcProperty, value)
        End Set
    End Property
 
    ''' <summary>
    ''' Obtient le nombre de nouveuax evenement
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property EventNumberText() As Integer
        Get
            Dim l_EventNumber As Object = DirectCast(m_EventNumberTxtBlock.Text, Object)
            Return DirectCast(l_EventNumber, Integer)
        End Get
        Private Set(ByVal value As Integer)
            m_EventNumberTxtBlock.Text = value
        End Set
    End Property
 
    ''' <summary>
    ''' Obtient ou définie si le nombre d'evenement doit etre afficher
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property IndicatorVisibility() As Visibility
        Get
            Return DirectCast(GetValue(IndicatorVisibilityProperty), Visibility)
        End Get
        Set(ByVal value As Visibility)
            SetValue(IndicatorVisibilityProperty, value)
        End Set
    End Property
 
#End Region
 
#Region "Constructeur"
 
    Public Sub New()
 
        MyBase.New()
 
        DefaultStyleKey = GetType(MyPositionControl)
 
    End Sub
 
#End Region
 
#Region "Méthodes privées"
 
#Region "Event Handler"
 
    Public Sub m_EventActionBtn_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
 
        'L'utilisateur clique donc on remet le nombre d'event à 0
        EventNumberText = "0"
        'Et on on passe les elements en relation avec le nombre d'event en invisible
        IndicatorVisibility = Windows.Visibility.Collapsed
        RaiseEvent Click(sender, e)
 
    End Sub
 
    Public Sub m_EventNumberImg_MouseLeftButtonUp(ByVal sender As Object, ByVal e As RoutedEventArgs)
 
        m_EventActionBtn_Click(sender, e)
        RaiseEvent Click(sender, e)
 
    End Sub
 
    Public Sub m_EventNumberTxtBlock_MouseLeftButtonUp(ByVal sender As Object, ByVal e As RoutedEventArgs)
 
        m_EventActionBtn_Click(sender, e)
        RaiseEvent Click(sender, e)
 
    End Sub
 
#End Region
 
#End Region
 
#Region "Méthodes publiques"
 
    Public Overrides Sub OnApplyTemplate()
 
        MyBase.OnApplyTemplate()
 
        Me.m_RootElement = DirectCast(Me.GetTemplateChild(EventNotifierControl.RootElement),  _
                                        FrameworkElement)
 
        'If (m_RootElement IsNot Nothing) Then
 
        '    m_EventActionBtn = DirectCast(Me.GetTemplateChild( _
        '        EventNotifierControl.EventAction), Button)
        '    If (m_EventActionBtn IsNot Nothing) Then
        '        AddHandler m_EventActionBtn.Click, AddressOf m_EventActionBtn_Click
        '    End If
 
        '    m_EventNumberImg = DirectCast(Me.GetTemplateChild( _
        '        EventNotifierControl.EventNumLogo), Image)
        '    If (m_EventNumberImg IsNot Nothing) Then
        '        AddHandler m_EventNumberImg.MouseLeftButtonUp, AddressOf m_EventNumberImg_MouseLeftButtonUp
        '    End If
 
        '    m_EventNumberTxtBlock = DirectCast(Me.GetTemplateChild( _
        '        EventNotifierControl.EventNum), TextBlock)
        '    If (m_EventNumberTxtBlock IsNot Nothing) Then
        '        AddHandler m_EventNumberTxtBlock.MouseLeftButtonUp, AddressOf m_EventNumberTxtBlock_MouseLeftButtonUp
        '    End If
 
        'End If
 
    End Sub
 
    ''' <summary>
    ''' Lance l'animation qui indique un nouvel evenement
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub NotifyEvent(ByVal l_eventNumber As Integer)
 
        VisualStateManager.GoToState(Me, EventNotifierControl.NotifyAnimation, True)
        EventNumberText = l_eventNumber
        IndicatorVisibility = Windows.Visibility.Visible
 
    End Sub
 
#End Region
 
End Class
Et la déclaration dans le page.xaml :
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
<CustomCtrl:TaskMenuControl x:Name="TaskPanel"
                                    Background="LightGray"
                                    Height="50">
 
 
 
            <CustomCtrl:TaskMenuControl.Content>
                <Canvas>                    
                    <CustomCtrl:MyPositionControl x:Name="MyPosCtrl"
                                                  Height="50"
                                                  Width="50"
                                                  NormalPictureSrc="Images/MyPosNorm.png"
                                                  ActivatedPictureSrc="Images/MyPosActivate.png"
                                                  Click="MyPosCtrl_Click"></CustomCtrl:MyPositionControl>
 
                    <CustomCtrl:EventNotifierControl x:Name="EventNotCtrl"
                                                     Height="50"
                                                     Width="50"
                                                     IconSrc="Images/event.png"
                                                     IndicatorNumberSrc="Images/eventNumber.png"></CustomCtrl:EventNotifierControl>
                </Canvas>
            </CustomCtrl:TaskMenuControl.Content>
 
        </CustomCtrl:TaskMenuControl>
L'exception ne se produit que lorsque j'instancie le contrôle "EventNotifierControl".

Toute aide ou expérience avec ce genre de problème est la bienvenue et surtout les solutions trouvées.

Merci d'avance