设置:
ListView与GridView,最初是隐藏的窗口加载,然后在某个用户操作时显示
目的:
可以设置GridView列的相对宽度。
问题:
我需要的可以通过使用宽度转换器来实现(类似于这里的答案),或者通过在ListView上添加Behavior(参见此解决方案)。这两种方法似乎都是有效的——但只适用于从一开始就呈现的控件。在我的例子中,当进行计算时,ActualWidth总是为0,当ListView可见时,这些计算不会重复。
所以,我猜,真正的问题这里是如何得到列的宽度被重新评估时,ListView的ActualWidth得到大于0
解决方案最好是在XAML级别,不涉及代码隐藏-但如果这是唯一的选择,也可以这样做;-)
有什么建议吗?
注:下面是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*宽度缩小,所以我看到(空)控件,当它应该被隐藏。
如何隐藏/显示ListView?这个问题似乎暗示你这样做是通过将Width属性设置为0(或非零来显示它)。相反,你应该尝试使用Visibility属性(设置为"collapse"来隐藏,或者设置为"Visible"来显示)。这将导致重新计算列的宽度。
更新:根据你更新的问题,我建议看看这个解决方案:http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx
我从这里得到它FWIW: WPF:扩展ListView's GridView的最后一列