使GridView列可见后调整其大小

时间:2011-09-26 15:38:52

标签: wpf listview gridview column-width

设置:

带有GridView的ListView,在加载窗口时最初隐藏,然后在某个用户操作时可见。

目标:

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

问题:

我需要的是通过在宽度上使用转换器(类似于答案here),或者在ListView上添加行为(请参阅this solution)。 这两种方法似乎都是有效的 - 但仅适用于从早期开始渲染的控件。 在我的情况下,当进行计算时,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的容器本身(以操纵其在折叠和可见之间的可见性),但问题是该列不会从其原始的4 *宽度缩小,所以我看到(空)控件何时被隐藏。

1 个答案:

答案 0 :(得分: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