Compartir a través de


DataTemplate.LoadContent Método

Definición

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 control ListView que contiene los números del 1 al 10. Cuando el usuario selecciona un elemento en listView, 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 x: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>

    <ListView x:Name="numberList" 
              SelectionChanged="ListView_SelectionChanged" 
              HorizontalAlignment="Center">
        <ListViewItem Content="1"/>
        <ListViewItem Content="2"/>
        <ListViewItem Content="3"/>
        <ListViewItem Content="4"/>
        <ListViewItem Content="5"/>
        <ListViewItem Content="6"/>
        <ListViewItem Content="7"/>
        <ListViewItem Content="8"/>
        <ListViewItem Content="9"/>
        <ListViewItem Content="10"/>
    </ListView>

    <Border x:Name="selectedItemDisplay" 
            Width="50" Height="50"/>
</StackPanel>
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListViewItem lvi = ((sender as ListView).SelectedItem as ListViewItem);
    SelectDataTemplate(lvi.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 ListView.
        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;
}

Comentarios

Cuando se llama a LoadContent, se crean los objetos UIElement de DataTemplate y se pueden agregar al árbol visual de otro UIElement.

Se aplica a