Windows phone 8 替换数据模板中的元素
我有一个LongListSelector,其ItemTemplate如下所示:Windows phone 8 替换数据模板中的元素,windows-phone-8,datatemplate,datatemplateselector,Windows Phone 8,Datatemplate,Datatemplateselector,我有一个LongListSelector,其ItemTemplate如下所示: <LongListSelector.ItemTemplate> <DataTemplate> <StackPanel> Here I have a lot of elements that are always the same. . . . and one
<LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel>
Here I have a lot of elements that are always the same.
.
.
.
and one that varies
</StackPanel>
</DataTemplate>
</LongListSelector.ItemTemplate>
在这里,我有很多元素都是一样的。
.
.
.
还有一个是不同的
我知道如何使用此类根据项目类型更改ItemTemplate中的所有内容
我的问题是,如何使用模板选择器只更改一个变化的项目,这样我就不需要重复所有其他元素
我尝试在de
StackPanel
内部使用ContentControl
和ContentPresenter
但没有成功您需要在XAML中创建一个数据触发器来检查每个项目是否都是您要查找的项目
相关程度足以让你走上正轨。结果会是这样的:
<Style TargetType="TabItem">
<Style.Triggers>
<!-- Styling for elements that are NOT the last item -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LastItemConverter}}" Value="False">
<Setter Property="Template">
<Setter.Value>
.
.
.
</Setter.Value>
</Setter>
</DataTrigger>
<!-- Styling for elements that are the last item -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LastItemConverter}}" Value="True">
<Setter Property="Template">
<Setter.Value>
.
.
.
</Setter.Value>
</Setter>
</DataTrigger>
希望有帮助 我不想为列表中的某一项设置样式。我想要的是重用除一个元素之外的大部分DataTemplate。它就像DataTemplate中的DataTemplate。
public class IsLastItemInContainerConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
DependencyObject item = (DependencyObject)value;
TabControl tc = (TabControl)TabControl.ItemsControlFromItemContainer(item);
// Return true for the first and last element
// (so they are similarly styled compared to other elements).
if (tc.ItemContainerGenerator.IndexFromContainer(item) == tc.Items.Count - 1) {
return true;
}
else if (tc.ItemContainerGenerator.IndexFromContainer(item) == 0)
{
return true;
}
else
{
return false;
}
}