【发布时间】:2013-11-26 20:02:29
【问题描述】:
我可以在一个容器(主视图)中拥有 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,那么我禁用折叠按钮。如果需要,我可以重构代码以不同的方式创建子视图。
【问题讨论】:
-
删除所有这些并使用
DockPanel。 -
不确定你的意思。用停靠面板替换代码背后的网格?然后去掉它使用列的地方后面的代码?
-
我将主网格更改为 DockPanel,当非活动子视图折叠时它仍然不会调整大小。我添加了 LastChildFill 并没有导致最后一个可见的子视图占用空间。此外,DockPanel 中的最后一项比其他项占用更多空间。我需要它们在可见时都具有相同的宽度。