DataTemplate.LoadContent Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Crea gli oggetti UIElement in DataTemplate.
public:
virtual DependencyObject ^ LoadContent() = LoadContent;
DependencyObject LoadContent();
public DependencyObject LoadContent();
function loadContent()
Public Function LoadContent () As DependencyObject
Restituisce
UIElement radice di DataTemplate.
Esempio
Gli esempi seguenti illustrano l'uso del metodo LoadContent per modificare l'aspetto di un border in fase di esecuzione. Nell'esempio viene creato un listBox contenente i numeri da 1 a 10. Quando l'utente seleziona un elemento in ListBox, il bordo visualizza il numero selezionato. Se l'utente seleziona un numero pari, il numero è rosso e ha un cerchio verde intorno a esso. Se l'utente seleziona un numero dispari, il numero è blu e ha un quadrato viola intorno a esso.
<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
Commenti
Quando si chiama LoadContent, vengono creati gli oggetti UIElement in DataTemplate e è possibile aggiungerli all'albero visivo di un altro UIElement.