8

コードに次の ListView があります。views:GameCardはカスタムUserControlで、3 つのアイテムを持つ{Binding}有効なDataContextオブジェクトです。カスタムがなければ、ItemContainerStyleすべてが完全に機能します。リストにはGameCards正しい情報が 3 つ表示されます。ItemContainerStyle部品を追加するとすぐに、3 つの「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>
4

3 に答える 3

13

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>
于 2013-01-14T17:28:33.663 に答える
1

これはあなたには当てはまらないかもしれませんが、これまでのところ、ItemContainerStyleを変更する必要はなく、ListView.Viewだけを変更する必要があります。テンプレートスタイルにグリッドを配置しているので、GridViewを探していると思います。これは、次の方法で行います。

<ListView.View>
    <GridView>
        <GridViewColumn Width="120">
            <GridViewColumnHeader Height="14" >
                <TextBlock Text="Type" FontSize="9"/>
            </GridViewColumnHeader>
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock  Text="{Binding Path=Name, FallbackValue=MISSING}" /> 
    <!-- or content presenter with bindings here -->
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
...
于 2013-01-14T17:29:59.637 に答える
0

あなたのスタイルとすべてが問題ありません。必要なのは、 Content プロパティを ContentPresenterに割り当てるかバインドすることだけです。これが役立つことを願っています。

于 2013-01-14T17:39:03.723 に答える