ContentControl - ItemsControl中的内容设置器

时间:2017-12-24 12:54:09

标签: xaml setter contentcontrol

我的ContentControl中有一个奇怪的行为,并且不知道它为什么会这样。

此Xaml代码列出了我的ObservableCollection项目

<ItemsControl ItemsSource="{Binding Stops}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentControl>

                <local:TripDetailListItemControl />

            </ContentControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

但这仅显示列表的第一项

<ItemsControl ItemsSource="{Binding Stops}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentControl>
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Setter Property="Content">
                            <Setter.Value>

                                <local:TripDetailListItemControl/>

                            </Setter.Value>
                        </Setter>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

有什么区别?我是否错过了具有样式覆盖的Enumarator?

背景,为什么我需要这种方式,就是我在这个TripDetailListItemControl中有一个Proeprty来改变这个项目的视图。所以我希望这个样式中的DataTrigger以不同的方式显示它。

但该列表并未首先显示。我需要在Content Setter中添加什么才能显示所有项目?

1 个答案:

答案 0 :(得分:1)

添加BasedOn:

<Style TargetType="{x:Type ContentControl}" BasedOn="{StaticResource {x:Type ContentControl}}">

或:

<Style TargetType="{x:Type ContentControl}">
    <Setter Property="Content">
        <Setter.Value>
            <ContentPresenter></ContentPresenter>
        </Setter.Value>
     </Setter>
     <Setter Property="ContentTemplate">
         <Setter.Value>
             <DataTemplate>
                 <local:TripDetailListItemControl/>
             </DataTemplate>
         </Setter.Value>
     </Setter>
</Style>