/ / Bindung an Template-Eigenschaft in einem DataTemplate - Silverlight, Bindung, Datatemplate, Controltemplate

Bindung an Vorlageneigenschaft in einem DataTemplate - silverlight, binding, datatemplate, controlletemplate

Ich habe ein benutzerdefiniertes Steuerelement wie folgt:

<CustomControl>
<CustomControl.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</CustomControl.ContentTemplate>
</CustomControl>

In der Steuerelementvorlage von CustomControl versuche ich, aus einer DataTemplate heraus eine Bindung an CustomControl.ContentTemplate herzustellen, aber das funktioniert nicht:

<ListBox
ItemsSource="{Binding SearchResultsList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<ContentControl
Content="{Binding}"
ContentTemplate="{TemplateBinding ContentTemplate}">
</ContentControl>
<ItemsControl
ItemsSource="{Binding HierarchyPath}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="->"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Hinweis: ContentTemplate = "{TemplateBinding ContentTemplate}"

Ich weiß, dass Sie TemplateBinding nicht verwenden könneneine Datenvorlage, obwohl sich die Datenvorlage in einer Steuerungsvorlage befindet. Aber weiß jemand, wie man das erreicht, was ich erreichen möchte, ohne TemplateBinding zu verwenden?

Antworten:

0 für die Antwort № 1

Am besten verwenden Sie ListBox.ItemContainerStyle und erstellen daraus ein ControlTemplate.

Etwas wie das:

<ListBox>
<ListBox.ItemContainerStyle>
<Style  TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<StackPanel Orientation="Vertical">
<ContentControl
Content="{Binding}"
ContentTemplate="{TemplateBinding ContentTemplate}">
</ContentControl>
<ItemsControl
ItemsSource="{Binding HierarchyPath}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="->"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>