我可以在一个容器(mainview)中拥有1到4个视图(子视图)。当其他子视图折叠时(通过按钮单击操作),我需要获得一个子视图来动态调整大小并填充主视图。希望下面的内容足以说明这一点。
子视图通过其构造函数加载到主视图中。
MainView代码背后:
// this code is in a foreach
ColumnDefinition column = new ColumnDefinition();
column.Width = new GridLength(10, GridUnitType.Star);
this.gridMainView.ColumnDefinitions.Add(column);
subView.SetValue(Grid.ColumnProperty,
this.gridOnMainView.ColumnDefinitions.IndexOf(column));
this.gridOnMainView.Children.Add(subView);
在主视图上,我有一个按钮,通过主视图的视图模型,成功折叠除了一个子视图之外的所有子视图(活动子视图不会折叠)。虽然非活动子视图会崩溃,但活动子视图不会调整大小。
导致操作的主视图上的按钮:
<Button Grid.Row="1" Grid.Column="2" Content="Meter" Command="{Binding HideSubViewsAction}" Width="50" Margin="0,10,0,0" Cursor="Hand" />
子视图中具有绑定可见性属性的网格:
<Grid Visibility="{Binding IsCollapsed, Converter={StaticResource
booleanToStringConverter}, ConverterParameter=SubViewVisibility}">
<Grid.RowDefinitions>
<RowDefinition Height="20*" />
<RowDefinition Height="25*" />
<RowDefinition Height="25*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100*" />
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0">
<Viewbox>
<StackPanel>
<Label Content="{Binding OutputVoltage}" />
<Label Content="v" />
</StackPanel>
</Viewbox>
</Border>
<Border Grid.Row="1" Grid.Column="0">
<Viewbox>
<StackPanel Margin="0,0,0,10">
<Label Content="{Binding OutputCurrent}" />
<Label Content="mA" />
</StackPanel>
</Viewbox>
</Border>
...Other markup
</Grid>
转换器只检查布尔值IsCollapsed并将true转换为“Collapsed”,将false转换为“Visible”
折叠非活动子视图时,左侧活动子视图不会重新调整大小。当其他子视图折叠时,如何让单独的活动子视图重新调整大小?我不知道主视图中会有多少视图。可以有1到4个子视图。当然,如果只有1,那么我禁用折叠按钮。如果需要,我可以重构代码以不同方式创建子视图。
答案 0 :(得分:0)
问题是,当所有子视图都已折叠时,您需要进行ColumnSpan
更新。一种简单的方法是在构造函数foreach中为每个子视图添加一个绑定:
subView.SetBinding(Grid.ColumnSpanProperty, new Binding("SubViewColumnSpan"));
现在将属性ColumnSpan SubViewColumnSpan
添加到您的视图模型中。使用HideSubViewsAction
命令将其设置为10(或者至少是网格中列数的数字)。
以上是一个开始,但当然,当重新扩展另一个子视图时,您必须将SubViewColumnSpan
属性设置回1。
(注意:鉴于您的需求在复杂性方面越来越大,这种方法很可能会变得繁琐,考虑设计一个custom Panel
来处理子视图布局。)