2011-07-28 1 views
1

Je suis en train de convertir this WPF application en WPF UserControl pour pouvoir l'utiliser dans l'application WinForms via ElementHost. Je suis nouveau à WPF et je ne l'ai jamais touché avant cette tentative, donc je vais peut-être aller dans le mauvais sens. J'ai compilé le projet UserControl, mais mes ressources statiques sont soulignées dans VS avec le message "La ressource 'x' n'a pas pu être résolue". J'ai essayé de déplacer les xamls avec les éléments x: Key nécessaires d'un niveau (le même niveau que le UserControl Dijagram.xaml), mais il ne peut toujours pas les résoudre.Conversion de l'application WPF en UserControl pour utilisation dans l'application WinForms via ElementHost

Dans l'application WinForms, lorsque vous essayez d'ajouter UserControl via le concepteur en sélectionnant le contenu hébergé dans les tâches ElementHost, l'erreur suivante se produit: "Une erreur s'est produite lors de la création d'un objet de type 'DijagramLC.Dijagram'. le type a un constructeur par défaut "(même si le constructeur par défaut existe).

Cependant, si je l'ajoute dans codebehind, comme ceci:

wpfUserControl = new Dijagram(); 
elementHost1.Child = wpfUserControl; 
Controls.Add(elementHost1); 

le code compile mais lance cette erreur d'exécution: "System.Windows.Markup.XamlParseException: 'Apporter de la valeur sur' System.Windows .StaticResourceExtension 'a lancé une exception.' Numéro de ligne '20' et position de ligne '4' ---> System.Exception: Impossible de trouver la ressource nommée 'MyToolbar' Les noms de ressources sont sensibles à la casse "

J'ai essayé avec et sans App.xaml et en ajoutant des éléments ResourceDictionary pour xamls problématiques, mais fondamentalement, je n'ai aucune idée de ce que je fais :)

J'ai téléchargé le code sur mon SkyDrive et j'apprécierais vraiment que quelqu'un puisse jeter un coup d'oeil et me dire ce que Je fais mal: https://skydrive.live.com/redir.aspx?cid=21be1f8e850e85cc&resid=21BE1F8E850E85CC!353

Je déteste sauter aveuglément à la nouvelle technologie comme ça, mais je n'ai pas eu le choix cette fois, et j'ai besoin de savoir si ma demande est même réalisable de cette façon.

Répondre

1

Vous obtenez probablement l'erreur car vous utilisez des ressources d'un dictionnaire de ressources qui n'est pas chargé. Chargement d'un dictionnaire de ressources dans l'application hôte résoudra probablement le problème:

// When hosting a WPF usercontrol inside an element host, 
// application resources are not loaded, so we need to load them manually. 
var resources = new ResourceDictionary 
{ 
    Source = new Uri("/UNIT4.MKB.GUI.XAML.Dashboard.Resources;component/resources.xaml", UriKind.Relative) 
}; 


// Check for null reference 
if (Application.Current != null) 
{ 
    //Merge the loaded ResourceDictornairy with the dummy application Resources. 
    Application.Current.Resources.MergedDictionaries.Add(resources); 
} 
+0

Où entrez-vous ce code? Avez-vous à faire cela pour chaque ressource dans le dictionnaire fusionné? – jmgardn2

2

Le problème est, vous avez besoin du constructeur par défaut comme ceci:

public CreatedPollsUC() 
{ 
    InitializeComponent(); 
} 

Si vous avez tout autre code dans le constructeur, l'erreur occures:

public CreatedPollsUC() 
{ 
    InitializeComponent(); 
    // ... more code 
} 

donc, si vous voulez utiliser autre code dans le constructeur, vous devez appliquer le contrôle d'abord à l'hôte de l'élément. Ensuite, vous pouvez modifier le constructeur.

Questions connexes