2011-09-26 56 views
1

的设置:调整大小的GridView列之可见

的ListView与被加载的窗口时最初被隐藏,并且然后在特定用户动作可见的GridView。

目的:

可以设置GridView的列的相对宽度。

问题:

我需要可以通过使用在宽度(类似于答案here东西)转换器来实现,或者通过在ListView控件添加行为(见this solution)。 这两种方法似乎都是有效的 - 但仅限于从早期开始渲染的控件。 在我的情况下,当进行计算时,ActualWidth始终为0,并且在ListView变为可见时不会重复这些计算。

所以,我想,这里的真正问题是如何获得列的宽度进行重新评估的时候ListView控件的ActualWidth获取大于0

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

有什么建议吗?

P.S.以下是Chris的问题,下面是关于如何隐藏/显示ListView的说明:它是另一个容器控件的子元素,托管在网格列中,该列的宽度由触发器控制。

<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 *宽度收缩,所以当它应该被隐藏时,我会看到(空)控件。

回答

0

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

UPDATE:

基于更新后的问题,我建议你检查出这个解决方案:http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

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

+0

克里斯,我有更多更新的原题细节。 希望这可以揭示更多的情况...... – Alex