J'ai une bibliothèque de contrôle personnalisée où j'ai plusieurs contrôles personnalisés que j'utilise dans mon application principale. J'ai un contrôle personnalisé simple qui permet à l'utilisateur de sélectionner des valeurs d'épaisseur de stylo à partir d'une zone de liste déroulante. Maintenant, je crée un nouveau contrôle personnalisé, basé sur une liste, et je veux inclure la combobox d'épaisseur du stylo dans ItemTemplate du nouveau contrôle personnalisé.WPF: Erreur lors de l'utilisation d'un contrôle personnalisé dans le ItemTemplate d'un autre contrôle personnalisé
Je reçois cette erreur:
« ne peut pas créer une instance de « LineThicknessComboBox » défini dans CustomControls d'assemblage ... Exception a été levée par la cible d'un appel d'erreur à l'objet. « 10_T » dans le fichier de balisage 'CustomControls, composante/Thèmes/CustomListBox.General.xaml'
Voici le XAML et le code derrière le LineThicknessComboBox:
namespace CustomControls
{
public class LineThicknessComboBox : ComboBox
{
public LineThicknessComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(LineThicknessComboBox)
, new FrameworkPropertyMetadata(typeof(LineThicknessComboBox)));
}
}
}
et LineThickne ssCombobox.Generic.xaml:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControls">
<Style TargetType="{x:Type local:LineThicknessComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
...
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Voici le XAML et codebehind pour mon nouveau CustomListBox:
namespace CustomControls
{
public class CustomListBox : ListBox
{
public CustomListBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListBox)
, new FrameworkPropertyMetadata(typeof(CustomListBox)));
}
}
}
et CustomListBox.Generic.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControls">
<Style TargetType="{x:Type local:CustomListBox}" BasedOn="{StaticResource {x:Type ListBox}}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border>
...
<local:LineThicknessComboBox />
...
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Et voici ma Generix.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CustomControls;component/Themes/LineThicknessComboBox.Generic.xaml"/>
<ResourceDictionary Source="CustomControls;component/Themes/CustomListBox.Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Je pense J'ai un problème de référence, mais je n'arrive pas à comprendre ce qui ne va pas. Le programme compile et s'exécute sans aucun avertissement/erreur, mais lorsque le CustomListBox est créé dans mon application principale, j'obtiens l'erreur listée ci-dessus. Sans inclure LineThicknessComboBox, la CustomListBox fonctionne correctement.
Quelqu'un peut-il expliquer pourquoi je reçois cette erreur? Il est possible d'inclure mon contrôle personnalisé dans un autre, même s'ils sont dans la même bibliothèque de contrôle personnalisée, est-ce correct?
Merci!
"Exception a été levée par la cible d'un appel." Percer dans InnerException (vous devrez peut-être explorer plus d'un niveau) et vous devriez trouver une exception plus significative.Cela peut rendre l'erreur évidente une fois que vous la voyez, ou à défaut si vous pouviez l'afficher, cela aiderait avec le diagnostic. – itowlson