Silverlight и WPF
Вы можете обойти это с помощью относительной привязки источника:
Вместо:
{TemplateBinding InnerTemplate}
Вы бы использовали:
{Binding RelativeSource={RelativeSource AncestorType=local:CheckBoxWrapperList}, Path=InnerTemplate}
Это немного запутанно, но работает.
WinRT
WinRT не имеет AncestorType.У меня есть что-то , которое работает, но это ужасно.
Вы можете использовать прикрепленное свойство, чтобы сохранить значение TemplateBinding, а затем получить к нему доступ, используя ElementName ...
<ControlTemplate TargetType="local:CheckBoxWrapperList">
<Grid x:Name="TemplateGrid" magic:Magic.MagicAttachedProperty="{TemplateBinding InnerTemplate}">
<Grid.Resources>
<DataTemplate x:Key="wrapper">
<CheckBox>
<ContentPresenter ContentTemplate="{Binding ElementName=TemplateGrid, Path=(magic:Magic.MagicAttachedProperty)}" Content="{Binding}" />
</CheckBox>
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemTemplate="{StaticResource wrapper}" ItemsSource="{TemplateBinding ItemsSource}" />
</Grid>
</ControlTemplate>
Я не знаю, есть ли лучший способ для WinRT.