我的代码中有以下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>
答案 0 :(得分:9)
您需要设置ControlTemplate的TargetType。为了使您的ItemTemplate工作,您还需要绑定Content
和ContentTemplate
属性。
<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>
答案 1 :(得分:0)
这可能不是你的情况,但到目前为止我还没有修改ItemContainerStyle,只是ListView.View。由于你在模板样式中放置了一个Grid,我假设你正在寻找一个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>
...
答案 2 :(得分:0)
你的风格,一切都很好。所需要的只是将内容属性分配或绑定到你的ContentPresenter。我希望这会有所帮助。