1

设置:

ListView 与 GridView 在加载窗口时最初隐藏,然后在特定用户操作时变为可见。

目的:

能够设置 GridView 列的相对宽度。

问题:

我需要的可以通过在宽度上使用转换器来实现(类似于此处的答案),或者通过在 ListView 上添加行为(参见此解决方案)来实现。这两种方法似乎都是有效的——但仅适用于从一开始就呈现的控件。在我的情况下,进行计算时,ActualWidth 始终为 0,并且在 ListView 可见时不会重复这些计算。

所以,我想,这里真正的问题是如何在 ListView 的 ActualWidth 大于 0 时重新评估列的宽度。

该解决方案最好是在 XAML 级别,而不涉及代码隐藏 - 但如果这是唯一的选择,那也可以;-)

有什么建议么?

PS在下面 Chris 的问题之后,这里澄清了 ListView 如何隐藏/显示:它是另一个容器控件的子控件,托管在 Grid 列中,并且该列的宽度由触发器操纵。

<ColumnDefinition>
    <ColumnDefinition.Style>
        <Style>
            <Setter Property="ColumnDefinition.Width" Value="4*"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=OpenItems.Count}" Value="0">
                    <Setter Property="ColumnDefinition.Width" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ColumnDefinition.Style>
</ColumnDefinition>

我尝试对 ListView 的容器本身应用一个类似的触发器(以在 Collapsed 和 Visible 之间操作它的 Visibility),但问题是 Column 没有从原来的 4* 宽度缩小,所以我看到(空) 控制何时应该隐藏它。

4

1 回答 1

0

你如何隐藏/显示 ListView?这个问题似乎暗示您通过将 Width 属性设置为 0(或非零来显示它)来这样做。相反,您应该尝试使用Visibility属性(设置为“Collapsed”以隐藏,或“Visible”以显示)。这应该会导致重新评估列的宽度。

更新:

根据您更新的问题,我建议查看此解决方案:http: //www.codeproject.com/KB/grid/ListView_layout_manager.aspx

我从这里得到它 FWIW: WPF : Extend last column of ListView's GridView

于 2011-09-26T15:52:41.237 回答