ListViewItem自定义模板:ContentPresenter保持为空

Mod*_*ndi 6 wpf xaml templates contentpresenter listviewitem

我的代码中有以下ListView.views:GameCard是一个自定义UserControl,{Binding}是一个DataContext有三个项目的有效对象.没有自定义ItemContainerStyle一切都很完美 - 列表显示三个GameCards正确的信息等.一旦我添加ItemContainerStyle部分,我只得到三个"ABCD"; 所以数据仍然正确加载,但我UserControl不再显示(我只添加"ABCD"来检查数据是否存在,否则我只得到空盒子).

我在网上找到的每一条信息似乎都表明只是ContentPresenter在模板中放置一个元素应该可以工作,但在这种情况下似乎并不存在.我错过了什么?

<ListView Grid.Row="1" ItemsSource="{Binding}" BorderThickness="0,0,1,0"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FF614B4B" Offset="0"/>
            <GradientStop Color="#FFDA7070" Offset="1"/>
        </LinearGradientBrush>
    </ListView.Background>
  <ListView.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ListView.ItemsPanel>
  <ListView.ItemTemplate>
    <DataTemplate>
      <views:GameCard />
    </DataTemplate>
  </ListView.ItemTemplate>
  <ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate>
            <Grid>
              <TextBlock Text="ABCD" />
              <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </ListView.ItemContainerStyle>
</ListView>
Run Code Online (Sandbox Code Playgroud)

Cle*_*ens 10

您需要设置ControlTemplate 的TargetType.为了使你的ItemTemplate工作,你还需要绑定ContentContentTemplate属性.

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <Grid>
                        ....
                        <ContentPresenter
                            Content="{TemplateBinding Content}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            ... />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)