0

为什么ItemContainerStyle下面详述)的实现会导致单个数据列绑定在其他工作ListView/上失败GridView

这是失败的视觉结果,其中显示了 3 行中的总项目,但不显示单个列项目:

在此处输入图像描述

没有覆盖的实现ItemContainerStyle

在此处输入图像描述


实际目标在回答问题之前,请考虑一下我的最终目标是替代解决方法。我想要一个GridView类似的结构,其中每一都有一个阴影;最好显示在所选项目上/悬停操作上以使行弹出。正如上面的失败示例所示


代码

<ListView ItemsSource="{StaticResource People}">

                            <!--Comment this out to see working display-->
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <Grid Background="White" Margin="20">
                        <Grid.Effect>
                            <DropShadowEffect />
                        </Grid.Effect>
                        <ContentPresenter Content="{TemplateBinding Content}" 
                                          ContentTemplate="{TemplateBinding ContentTemplate}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    </Grid>
                </ControlTemplate>
        </Setter.Value>
        </Setter>
    </Style>
</ListView.ItemContainerStyle>
                                <!--End Failure Point-->
<ListView.View>
    <GridView >
        <GridViewColumn Header="First" DisplayMemberBinding="{Binding Path=First}"  />
        <GridViewColumn Header="Last"  DisplayMemberBinding="{Binding Path=Last}" />
        <GridViewColumn Header="Phone" DisplayMemberBinding="{Binding Path=Phone}" />
    </GridView>
</ListView.View>
</ListView>

要重现,您将需要

Xaml 中定义的静态资源数据

xmlns:model="clr-namespace:{your namespace}.Model"

<UserControl.Resources>
    <model:People x:Key="People">
        <model:Person First="Joe" Last="Smith" Phone="303-555-5555"/>
        <model:Person First="Jenny" Last="Johnson" Phone="720-867-5309" />
        <model:Person First="Frank" Last="Wright" Phone="202-555-5555" />
    </model:People>
</UserControl.Resources>

模型命名空间中的People.cs

public class People : List<Person> { }

public class Person
{
    public string First { get; set; }
    public string Last { get; set; }
    public string Phone { get; set; }
}
4

1 回答 1

1

是用于的的ContentPresenter错误节点类型。ControlTemplateItemContainerStyle

要修复更改ContentPresenterGridViewRowPresenter删除ContentTemplate

<ControlTemplate TargetType="ListViewItem">
    <Grid Background="White" Margin="20">
        <Grid.Effect>
            <DropShadowEffect />
        </Grid.Effect>
        <GridViewRowPresenter Content="{TemplateBinding Content}"                                  
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
    </Grid>
</ControlTemplate>

视觉结果

在此处输入图像描述

于 2020-01-28T22:34:13.210 回答