DataTemplate.LoadContent Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Crea los objetos UIElement en DataTemplate.
public:
virtual DependencyObject ^ LoadContent() = LoadContent;
DependencyObject LoadContent();
public DependencyObject LoadContent();
function loadContent()
Public Function LoadContent () As DependencyObject
Devoluciones
UiElement raíz de DataTemplate.
Ejemplos
En los ejemplos siguientes se muestra el uso del método LoadContent para cambiar la apariencia de un borde en tiempo de ejecución. En el ejemplo se crea un ListBox que contiene los números del 1 al 10. Cuando el usuario selecciona un elemento en listBox, el borde muestra el número seleccionado. Si el usuario selecciona un número par, el número es rojo y tiene un círculo verde alrededor de él. Si el usuario selecciona un número impar, el número es azul y tiene un cuadrado púrpura alrededor de él.
<StackPanel 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 void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
SelectDataTemplate(lbi.Content);
}
private void SelectDataTemplate(object value)
{
string numberStr = value as string;
if (numberStr != null)
{
int num;
try
{
num = Convert.ToInt32(numberStr);
}
catch
{
return;
}
DataTemplate template;
// Select one of the DataTemplate objects, based on the
// value of the selected item in the ComboBox.
if (num % 2 != 0)
{
template = rootStackPanel.Resources["oddNumberTemplate"] as DataTemplate;
}
else
{
template = rootStackPanel.Resources["evenNumberTemplate"] as DataTemplate;
}
selectedItemDisplay.Child = template.LoadContent() as UIElement;
TextBlock tb = FindVisualChild<TextBlock>(selectedItemDisplay);
tb.Text = numberStr;
}
}
private childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
{
return (childItem)child;
}
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
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
Comentarios
Cuando se llama a LoadContent, se crean los objetos UIElement de DataTemplate y se pueden agregar al árbol visual de otro UIElement.