Hi,
I would like to dynamically build a DataTemplate and am looking for help on how to do it.
I tried and failed with the following:
I loaded a working DataTemplates xaml into a string.
<DataTemplate>
-----
-----
-----
</DataTemplate>
I executed the following and got this error
No default namespace has been declared Line 1 Pos 14
String xaml = GetXaml(); // A function that I wrote that created the string
DataTemplate dt = (DataTemplate)XamlReader.Load(xaml); // Failed on this line
myGrid.RowDetailsTemplate = dt;
Can you please set me straight on how to do this.
Thanks
Rich
5 Answers, 1 is accepted
I elimated the namespace error message by adding xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" to the DataTemplate tag.
I then crashed on a 4004.... See screen shot
Based on the information that you provided there is no way to be certain about what is going wrong. However if you are using any other namespaces in the template you will probably have to add them too. I.e. if you are using telerik:RadButton, you have to add xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
to the DataTemplate tag. Does this work for you? if not, would it be possible to provide more detailed information about the project?
Nik
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
Hi Nik
The following is the original Xaml with <telerik.RadGridView.RowDetailsTemplate> commented out. It is followed by the dynamic Xaml that was generated. I loaded the DataTemplate as follows:
myGrid RowDetailsTemplate = (DataTemplate)XanlReader.Load(xaml);
I added all the namespaces from the original Xaml. Am I adding the dynamic xaml to the RadGridView properly? I have no idea what to do next and am hoping that if you don't see something obvious you could create a very simple example of dynamically creating a RowDetailsTemplate. The reason I need this is that I am trying to build a adhoc query builder where the end-user could specify how the grid should be rendered.
<
UserControl
x:Class
=
"RadGridView_SL4_AR_25.MainPage"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:my
=
"clr-namespace:RadGridView_SL4_AR_25"
xmlns:telerikQuickStart
=
"clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls"
mc:Ignorable
=
"d"
d:DesignHeight
=
"700"
d:DesignWidth
=
"700"
>
<
UserControl.Resources
>
<
my:MyViewModel
x:Key
=
"MyViewModel"
/>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
DataContext
=
"{StaticResource MyViewModel}"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"*"
/>
<
ColumnDefinition
Width
=
"350"
/>
</
Grid.ColumnDefinitions
>
<
telerik:RadGridView
Name
=
"myGrid"
ItemsSource
=
"{Binding GridItems, Mode=TwoWay}"
SelectionChanged
=
"myGrid_SelectionChanged"
IsSynchronizedWithCurrentItem
=
"True"
RowIndicatorVisibility
=
"Visible"
RowDetailsVisibilityMode
=
"VisibleWhenSelected"
CanUserSortColumns
=
"True"
IsReadOnly
=
"True"
ShowGroupPanel
=
"True"
Loaded
=
"myGrid_Loaded"
AutoGenerateColumns
=
"False"
>
<!--
<
telerik:RadGridView.RowDetailsTemplate
>
<
DataTemplate
>
<
Grid
Width
=
"Auto"
HorizontalAlignment
=
"Stretch"
>
<
Grid.RowDefinitions
>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
</
Grid.ColumnDefinitions
>
<
TextBlock
Text
=
"Name: "
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"0"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[0]}"
Margin
=
"5,10,0,0"
FontSize
=
"14"
Grid.Row
=
"0"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"Street: "
Margin
=
"75,0,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"1"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[1]}"
Margin
=
"5,0,0,0"
FontSize
=
"14"
Grid.Row
=
"1"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"City: "
Margin
=
"75,0,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"2"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[2]}"
Margin
=
"5,0,0,0"
FontSize
=
"14"
Grid.Row
=
"2"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"State: "
Margin
=
"75,0,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"3"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[3]}"
Margin
=
"5,0,0,0"
FontSize
=
"14"
Grid.Row
=
"3"
Grid.Column
=
"3"
/>
<
TextBlock
Text
=
"Zip Code: "
Margin
=
"75,0,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"4"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[4]}"
Margin
=
"5,0,0,10"
FontSize
=
"14"
Grid.Row
=
"4"
Grid.Column
=
"1"
/>
</
Grid
>
</
DataTemplate
>
</
telerik:RadGridView.RowDetailsTemplate
>
-->
</
telerik:RadGridView
>
<
telerik:RadPropertyGrid
x:Name
=
"RadPropertyGrid1"
Item
=
"{Binding SelectedItem, ElementName=myGrid, Mode=TwoWay}"
Margin
=
"8"
LabelColumnWidth
=
"130"
SearchBoxVisibility
=
"Collapsed"
Grid.Column
=
"1"
AutoGeneratePropertyDefinitions
=
"False"
>
</
telerik:RadPropertyGrid
>
</
Grid
>
</
UserControl
>
Dynamically loaded Xaml:
<
DataTemplate
xmlns
=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:mc
=
"http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x
=
"http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
=
"http://schemas.microsoft.com/expression/blend/2008"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:telerikQuickStart
=
"clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls"
xmlns:my
=
"clr-namespace:RadGridView_SL4_AR_25"
>
- <
Grid
Width
=
"Auto"
HorizontalAlignment
=
"Stretch"
>
- <
Grid.RowDefinitions
>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
<
RowDefinition
/>
</
Grid.RowDefinitions
>
- <
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
</
Grid.ColumnDefinitions
>
<
TextBlock
Text
=
"Name:"
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"0"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[0]}"
Margin
=
"5,10,0,0"
FontSize
=
"14"
Grid.Row
=
"0"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"Street:"
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"1"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[1]}"
Margin
=
"5,10,0,0"
FontSize
=
"14"
Grid.Row
=
"1"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"City:"
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"2"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[2]}"
Margin
=
"5,10,0,0"
FontSize
=
"14"
Grid.Row
=
"2"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"State:"
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"3"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[3]}"
Margin
=
"5,10,0,0"
FontSize
=
"14"
Grid.Row
=
"3"
Grid.Column
=
"1"
/>
<
TextBlock
Text
=
"Zip Code:"
Margin
=
"75,10,0,0"
FontWeight
=
"Bold"
FontSize
=
"14"
Grid.Row
=
"4"
Grid.Column
=
"0"
/>
<
TextBlock
Text
=
"{Binding Columns[4]}"
Margin
=
"5,10,0,10"
FontSize
=
"14"
Grid.Row
=
"4"
Grid.Column
=
"1"
/>
</
Grid
>
</
DataTemplate
>
I tried to reproduce the problem but I was actually unable to. Here is the code I used:
private
void
radGridView_Loaded(
object
sender, RoutedEventArgs e)
{
this
.radGridView.RowDetailsTemplate = (DataTemplate)XamlReader.Load(
@
"<DataTemplate xmlns="
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
" xmlns:mc="
"http://schemas.openxmlformats.org/markup-compatibility/2006"
" xmlns:x="
"http://schemas.microsoft.com/winfx/2006/xaml"
" xmlns:d="
"http://schemas.microsoft.com/expression/blend/2008"
">
<Grid Width=
""
Auto
""
HorizontalAlignment=
""
Stretch
""
>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=
""
Auto
""
/>
<ColumnDefinition Width=
""
Auto
""
/>
</Grid.ColumnDefinitions>
<TextBlock Text=
""
Name:
""
Margin=
""
75,10,0,0
""
FontWeight=
""
Bold
""
FontSize=
""
14
""
Grid.Row=
""
0
""
Grid.Column=
""
0
""
/>
<TextBlock Text=
""
{Binding Columns[0]}
""
Margin=
""
5,10,0,0
""
FontSize=
""
14
""
Grid.Row=
""
0
""
Grid.Column=
""
1
""
/>
<TextBlock Text=
""
Street:
""
Margin=
""
75,10,0,0
""
FontWeight=
""
Bold
""
FontSize=
""
14
""
Grid.Row=
""
1
""
Grid.Column=
""
0
""
/>
<TextBlock Text=
""
{Binding Columns[1]}
""
Margin=
""
5,10,0,0
""
FontSize=
""
14
""
Grid.Row=
""
1
""
Grid.Column=
""
1
""
/>
<TextBlock Text=
""
City:
""
Margin=
""
75,10,0,0
""
FontWeight=
""
Bold
""
FontSize=
""
14
""
Grid.Row=
""
2
""
Grid.Column=
""
0
""
/>
<TextBlock Text=
""
{Binding Columns[2]}
""
Margin=
""
5,10,0,0
""
FontSize=
""
14
""
Grid.Row=
""
2
""
Grid.Column=
""
1
""
/>
<TextBlock Text=
""
State:
""
Margin=
""
75,10,0,0
""
FontWeight=
""
Bold
""
FontSize=
""
14
""
Grid.Row=
""
3
""
Grid.Column=
""
0
""
/>
<TextBlock Text=
""
{Binding Columns[3]}
""
Margin=
""
5,10,0,0
""
FontSize=
""
14
""
Grid.Row=
""
3
""
Grid.Column=
""
1
""
/>
<TextBlock Text=
""
Zip Code:
""
Margin=
""
75,10,0,0
""
FontWeight=
""
Bold
""
FontSize=
""
14
""
Grid.Row=
""
4
""
Grid.Column=
""
0
""
/>
<TextBlock Text=
""
{Binding Columns[4]}
""
Margin=
""
5,10,0,10
""
FontSize=
""
14
""
Grid.Row=
""
4
""
Grid.Column=
""
1
""
/>
</Grid>
</DataTemplate>");
}
Are you sure that the formatting of the Xaml string you are trying to parse is correct? Could you try the snippet I sent you, and see if it works for you?
Furthermore, I believe you may find more information on creating templates programmatically, in the MSDN and in StackOverflow.
Hope this helps!
Greetings,
Nik
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
That worked, outstanding.
Thanks
Rich