ListViewItem内容未填充宽度

时间:2013-11-04 21:58:13

标签: wpf listview binding styles width

这是我用来绑定包含架构图像的项列表的一些XAML代码。我的图像显示正确,但没有填充ListViewItem的宽度,尽管高度已正确填充。我的图像也是方形的,所以我知道这没有发生,因为没有明显的图像失真。

此外,我注意到ListViewItem具有浅灰色背景颜色,它应该是透明的,或者为null / none。

任何人都知道如何正确绑定?

                <ListView x:Name="listView_Architecture" SelectionMode="Single" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Visible" HorizontalContentAlignment="Stretch" SelectionChanged="listView_Architecture_SelectionChanged">
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>
                    <ListView.ItemContainerStyle>
                        <Style TargetType="{x:Type ListViewItem}">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsVisible}" Value="True">
                                    <Setter Property="Visibility" Value="Visible" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding IsVisible}" Value="False">
                                    <Setter Property="Visibility" Value="Collapsed" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding IsSelected, Mode=TwoWay}" Value="True">
                                    <Setter Property="IsSelected" Value="True" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding IsSelected, Mode=TwoWay}" Value="False">
                                    <Setter Property="IsSelected" Value="False" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ListView.ItemContainerStyle>
                    <ListView.View>
                        <GridView AllowsColumnReorder="False">
                            <GridView.ColumnHeaderContainerStyle>
                                <Style TargetType="{x:Type GridViewColumnHeader}">
                                    <Setter Property="Visibility" Value="Collapsed"/>
                                </Style>
                            </GridView.ColumnHeaderContainerStyle>
                            <GridViewColumn>
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Image Stretch="Fill" Source="{Binding SetupImage, Converter={StaticResource ImageToSourceConverter}}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>

1 个答案:

答案 0 :(得分:0)

很难理解你在那里问的是什么。

你首先提到图像不适合完整的大小然后你跳到灰色背景,然后你最终谈论绑定。究竟是什么问题?

我会回答你的第一个问题。其他人很容易,我想你会自己找到答案。在Visual Studio中绑定难以理解的输入窗口和输入窗口将为您提供有关您在绑定中所做错误的所有信息

图像没有占用所有可用空间的原因是图像不知道那里有多少空间。

当测量ListView并且正在安排其子项时,它将计算并设置其子项的高度值,以便孩子知道高度,但不会在每个孩子上设置宽度。因此,你的Image无法找到一个祖先来接收可用的宽度,因此它不知道拉伸所需的宽度值,因此它将以正常大小显示,因为这是没有其他找到时的默认值。

如果您希望测试此行为,只需在ListViewItem样式中设置修复宽度值。如果将值设置为200像素,则图像将被拉伸到200的宽度。虽然当您没有设置任何宽度时,将找不到图像的值来知道如何拉伸自己。

那很简单。 :)