Dynamisch Last XAML
-
12-10-2019 - |
Frage
Ich habe eine Reihe von dynamisch erstellten Gridviews, dass ich laden. Alles funktioniert gut, außer wenn die Zeilen Details erweitern ich einen Fehler „Can not unbekannte Art erstellen‚{clr-namespace: EMR.Controls.HPI} HPIDialogButton‘. Der Namespace EMR.Controls.HPI ist in der Ausführung der Montage und ich kann verwenden genau die gleiche XAML andere Orte, und es funktioniert ohne Probleme Wenn ich die Zeile aus kommentieren. ‚hpi: HPIDialogButton ...‘ erweitern sie dann die Zeile Details ohne Probleme
.Es scheint an der Ladestelle, dass eine Verbindung fehlt, das für Sie erstellt wird, wenn Sie die Dinge direkt zu tun.
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);
}
Lösung
Versuchen Montage in allen Ihren Xmlns angeben (Sie verpassen es in einem):
Context.XmlnsDictionary.Add ( "hpi", "clr-namespace: EMR.Controls.HPI; Montage = EMR.Controls.HPI");