Je parfois obtenir l'exception suivante pour un contrôle personnalisé de la mine:XamlParseException: attribut dans le contrôle personnalisé manquant, mais il est défini!
XamlParseException occurred
Unknown attribute Points in element SectionClickableArea [Line: 10 Position 16]
La trace de la pile:
{System.Windows.Markup.XamlParseException: Unknown attribute Points on element SectionClickableArea. [Line: 10 Position: 16]
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at SomeMainDialog.InitializeComponent()
at SomeMainDialog..ctor()}
La déclaration d'élément où cela se produit ressemble à ceci (le gestionnaire d'événement référencé ici est défini, bien sûr):
<l:SectionClickableArea x:Name="SomeButton"
Points="528,350, 508,265, 520,195, 515,190, 517,165, 530,120, 555,75, 570,61, 580,60, 600,66, 615,80, 617,335, 588,395, 550,385, 540,390, 525,393, 520,385"
Click="SomeButton_Click"/>
Cela fait partie du code de SectionClickableArea
:
public partial class SectionClickableArea : Button {
public static readonly DependencyProperty PointsProperty
= DependencyProperty.Register("Points", typeof(PointCollection), typeof(SectionClickableArea),
new PropertyMetadata((s, e) => {
SectionClickableArea area = (SectionClickableArea) s;
area.areaInfo.Points = (PointCollection) e.NewValue;
area.UpdateLabelPosition();
}));
public PointCollection Points {
get { return (PointCollection) GetValue(PointsProperty); }
set { SetValue(PointsProperty, value); }
}
J'utilise cette commande pour quelque chose comme un bouton en forme de polygone. Par conséquent, je hérite du bouton. J'ai eu des problèmes similaires (E_AG_BAD_PROPERTY_VALUE
sur un autre DependencyProperty
de type chaîne, selon la ligne et la colonne donnée, etc) avec ce contrôle pendant des semaines, mais je n'ai absolument aucune idée pourquoi.
Une autre exception pour le même contrôle a eu lieu ce matin pour un autre utilisateur (extrait d'un journal et traduit de l'allemand):
Type: System.InvalidCastException Message: The object of type System.Windows.Controls.ContentControl could not be converted to type [...]SectionClickableArea. at SomeOtherMainDialog.InitializeComponent()
at SomeOtherMainDialog..ctor()
Exception interne:
Type: System.Exception Message: An HRESULT E_FAIL error was returned when calling COM component at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper obj, DependencyProperty property, DependencyObject doh)
at MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper doh, DependencyProperty property, Object obj)
at System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isSetByStyle, Boolean isSetByBuiltInStyle)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at System.Windows.Controls.Control.set_DefaultStyleKey(Object value)
at System.Windows.Controls.ContentControl..ctor()
at System.Windows.CoreTypes.GetCoreWrapper(Int32 typeId)
at MS.Internal.ManagedPeerTable.EnsureManagedPeer(IntPtr unmanagedPointer, Int32 typeIndex, Type type, Boolean preserveManagedObjectReference)
at MS.Internal.ManagedPeerTable.EnsureManagedPeer(IntPtr unmanagedPointer, Int32 typeIndex, Type type)
at MS.Internal.ManagedPeerTable.GetManagedPeer(IntPtr nativeObject)
at MS.Internal.FrameworkCallbacks.SetPropertyAttribute(IntPtr nativeTarget, String attrName, String attrValue, String attachedDPOwnerNamespace, String attachedDPOwnerAssembly)
Toutes les idées c'est mal avec le contrôle, ou ce que je peux faire pour trouver la source de ces exceptions? Comme je l'ai dit, ces problèmes se produisent seulement toutes les quelques dizaines de fois le contrôle est instancié.
Puisque c'est maintenant une question populaire, je voulais faire un suivi: Dans ce cas, nous n'avons jamais trouvé le problème. Cela fait pas mal de temps que je travaillais dessus, mais je pense qu'un membre de l'équipe l'a "résolu" en appelant le constructeur de l'objet pour le nœud racine XAML dans une boucle, en répétant jusqu'à ce qu'aucune exception ne soit levée. –