DataTemplate.LoadContent Method
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Creates the UIElement objects in the DataTemplate.
Assembly: System.Windows (in System.Windows.dll)
When you call LoadContent, the UIElement objects in the DataTemplate are created, and you can add them to the visual tree of another UIElement.
The following examples demonstrate using the LoadContent method to change the appearance of a Border at run time. The example creates a ListBox that contains the numbers 1 through 10. When the user selects an item in the ListBox, the Border displays the selected number. If the user selects an even number, the number is red and has a green circle around it. If the user selects an odd number, the number is blue and has a purple square around it.
<StackPanel Background="Transparent" Name="rootStackPanel"> <StackPanel.Resources> <DataTemplate x:Key="oddNumberTemplate"> <Grid> <Rectangle Stroke="Purple" StrokeThickness="4" /> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" Foreground="Blue" FontWeight="Bold"/> </Grid> </DataTemplate> <DataTemplate x:Key="evenNumberTemplate"> <Grid> <Ellipse Stroke="Green" StrokeThickness="4"/> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" Foreground="Red" FontWeight="Bold" /> </Grid> </DataTemplate> </StackPanel.Resources> <Border Name="selectedItemDisplay" Width="50" Height="50"/> <ListBox Name="numberList" SelectionChanged="ListBox_SelectionChanged"> <ListBoxItem Content="1"/> <ListBoxItem Content="2"/> <ListBoxItem Content="3"/> <ListBoxItem Content="4"/> <ListBoxItem Content="5"/> <ListBoxItem Content="6"/> <ListBoxItem Content="7"/> <ListBoxItem Content="8"/> <ListBoxItem Content="9"/> <ListBoxItem Content="10"/> </ListBox> </StackPanel>
Private Sub ListBox_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) Dim lbi As ListBoxItem = CType(CType(sender, ListBox).SelectedItem, ListBoxItem) SelectDataTemplate(lbi.Content) End Sub Private Sub SelectDataTemplate(ByVal value As Object) Dim numberStr As String = CType(value, String) If Not numberStr Is Nothing Then Dim num As Integer Try num = Convert.ToInt32(numberStr) Catch Return End Try Dim template As DataTemplate ' Select one of the DataTemplate objects, based on the ' value of the selected item in the ComboBox. If num Mod 2 <> 0 Then template = CType(rootStackPanel.Resources("oddNumberTemplate"), DataTemplate) Else template = CType(rootStackPanel.Resources("evenNumberTemplate"), DataTemplate) End If selectedItemDisplay.Child = CType(template.LoadContent(), UIElement) Dim tb As TextBlock = FindVisualChild(Of TextBlock)(selectedItemDisplay) tb.Text = numberStr End If End Sub Private Function FindVisualChild(Of childItem As DependencyObject) _ (ByVal obj As DependencyObject) As childItem Dim i As Integer For i = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 Dim child As DependencyObject = VisualTreeHelper.GetChild(obj, i) If ((Not child Is Nothing) And (TypeOf child Is childItem)) Then Return child End If Dim childOfChild As childItem = Me.FindVisualChild(Of childItem)(child) If (Not childOfChild Is Nothing) Then Return childOfChild End If Next i Return Nothing End Function