3 votes

Le contenu d'un ContentControl doit être un seul élément." exception

Je suis nouveau dans WPF donc ceci pourrait être une question stupide mais la voici.
J'essaie de créer un bouton personnalisé en utilisant XAML, voici ce que j'ai :

Le concepteur le comprend et cela compile sans erreurs, mais lorsque j'essaie d'exécuter le programme et de créer une instance de celui-ci, j'obtiens l'erreur :
"Le contenu d'un ContentControl doit être un seul élément."

Mon fichier de ressources est le suivant :

J'ai le DockPanel à l'intérieur de mon Border donc le bouton n'a qu'un seul enfant...
La classe "ShinyButton" ressemble à ceci :

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;

namespace Controls
{
    /// 
    /// Interaction logic for ShinyButton.xaml
    /// 
    public partial class ShinyButton : Button
    {
        public ShinyButton()
        {
            InitializeComponent();
        }
    }
}

Dans la fonction principale, je l'ajoute comme ceci :

public MainWindow()
        {
            InitializeComponent();

            ShinyButton shiny = new ShinyButton();
            this.AddChild(shiny); // C'est là où l'exception est déclenchée.

        }

Que est-ce que je fais de travers ?

7voto

Florian Gl Points 3968

Juste une supposition et pour le moment je ne suis pas en mesure de le tester, mais essayez le code suivant :

EDIT: D'accord, prochaine tentative :

Au lieu d'ajouter votre ShinyButton à la fenêtre (supprimez this.AddChild(shiny)), essayez d'ajouter votre ShinyButton au Grid en ajoutant ce code :

NameOfGrid.Children.Add(shiny);

La raison de cette erreur est que votre fenêtre ne peut avoir qu'un seul enfant et je parie que dans votre cas il y a déjà un Grid comme cet enfant.

1voto

AlSki Points 4364

Je viens d'essayer votre code et il fonctionne bien, avec quelques réserves.

Pour le faire fonctionner, j'ai dû supprimer le lien resouceDictionary, car je n'ai pas ce fichier. Y a-t-il une chance que du contenu soit défini, plutôt qu'un simple style/template etc.?

Aussi, je remarque que votre code a un x:Class="ShinyButton", y a-t-il du contenu défini dans le code ainsi que dans le xaml?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X