Динамически загружать XAML
-
12-10-2019 - |
Вопрос
У меня есть серия динамически созданных GridViews, которые я загружаю. Все работает нормально, за исключением случаев, когда данные о строке расширяются, я получаю ошибку «не могу создать неизвестный тип Точно так же xaml в других местах, и это работает без проблем. Если я прокомментирую строку «hpi: hpidialogbutton ...», то подробности о строке расширяются без проблем.
Кажется, в точке загрузки отсутствует какое -то подключение, которое создано для вас, если вы делаете что -то напрямую.
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);
}
Решение
Попробуйте указать сборку во всех ваших XMLN (вы пропустите ее в одном):
Context.xmlnsdictionary.add ("hpi", "clr-namespace: emr.controls.hpi; assembly = emr.controls.hpi");
Не связан с StackOverflow