Dynamiquement charge XAML
-
12-10-2019 - |
Question
I possède une série de GridViews créées dynamiquement que je charge. Tout fonctionne très bien, sauf lorsque les détails de ligne sont développés je reçois une erreur « Impossible de créer un type inconnu « {clr-namespace: EMR.Controls.HPI} HPIDialogButton ». L'espace de noms EMR.Controls.HPI est dans l'exécution de l'ensemble et je peux utiliser exactement la même XAML autres lieux et cela fonctionne sans problèmes Si je commente la ligne. « HPI: HPIDialogButton ... » puis les détails de ligne se dilatent sans problème
.Il semble au point de chargement il y a une connexion manquante qui est créé pour vous si vous faites les choses directement.
private RadGridView BuildSectionGrid()
{
//This is defined here until a better solution is found
string XAML = @"
<my:RadGridView IsReadOnly=""False"">
<my:RadGridView.Columns>
<telerik:GridViewToggleRowDetailsColumn />
<telerik:GridViewDataColumn Header=""Selected"" DataMemberBinding=""{Binding IsSelected}"" IsReadOnly=""False""/>
<telerik:GridViewDataColumn Header=""Definition"" DataMemberBinding=""{Binding Definition}"" IsReadOnly=""True""/>
</my:RadGridView.Columns>
<my:RadGridView.RowDetailsTemplate>
<DataTemplate>
<DockPanel Margin=""10"">
<Label Content=""Progress Note:"" DockPanel.Dock=""Left""/>
<hpi:HPIDialogButton Margin=""5 0 0 0"" DockPanel.Dock=""Right"" HPIText=""{Binding ElementName=NoteItemTextBox, Path=Text, Mode=TwoWay}""/>
<TextBox Name=""NoteItemTextBox"" Margin=""5 0 0 0"" DockPanel.Dock=""Left"" AcceptsReturn=""True"" TextWrapping=""Wrap"" Height=""100"" Text=""{Binding ProgressNote}""/>
</DockPanel>
</DataTemplate>
</my:RadGridView.RowDetailsTemplate>
</my:RadGridView>
";
//Load the XAML in again
ParserContext Context = new ParserContext();
Context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
Context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
Context.XmlnsDictionary.Add("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
Context.XmlnsDictionary.Add("telerik", "http://schemas.telerik.com/2008/xaml/presentation");
Context.XmlnsDictionary.Add("hpi", "clr-namespace:EMR.Controls.HPI");
Context.XmlnsDictionary.Add("my", "clr-namespace:EMR.Shared.Controls.WPF;assembly=EMR.Shared.Controls.WPF");
return (RadGridView)XamlReader.Parse(XAML, Context);
}
La solution
Essayez de spécifier l'assemblage dans toutes vos xmlns (vous manquez en un):
Context.XmlnsDictionary.Add ( "HPI", "clr-espace de nom: EMR.Controls.HPI; ensemble = EMR.Controls.HPI");