我有一个简单的
Grid
,有 2 列和 5 行。这些行中只有 2 行一次可见。根据第一行中 ComboBox
的选择,其他行的可见性会发生变化,并显示不同的 UserControl
。第一列是一个Label
,它应该描述第二列中UserControl
的用途(即“名称”,“密码”等)。当Grid
第一次显示时,第二行是Visible
,其他是Collapsed
。 'Name' 只有四个字母,例如 'Password' 有 8 个字母,所以 Column.Width
改变了。所以 GUI 看起来不稳定。我想要的是Column.Width
绑定到最大(即使是暂时Collapsed
)大小的Column
。我们在这里使用不同语言的语言文件,所以我无法将第一个Column
的大小设置为固定数量。
到目前为止这是我的代码:
<Window ...
ResizeMode="NoResize" SizeToContent="WidthAndHeight">
...
<StackPanel Grid.IsSharedSizeScope="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{x:Static base:AppStrings.SecurityMethods}" />
<ComboBox Grid.Column="1" ItemsSource="{Binding SecurityModes, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding SelectedSecurityMode}" />
</Grid>
<Grid Visibility="{Binding SelectedSecurityMode, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=Password}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{x:Static base:AppStrings.Password}" />
<wpfControls:TextBoxEx Grid.Column="1" Text="{Binding Password}" />
</Grid>
<Grid Visibility="{Binding SelectedSecurityMode, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=Sms}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{x:Static base:AppStrings.MobileNumber}" />
<wpfControls:PhoneNumberControl Grid.Column="1" PhoneNumber="{Binding MobileNumber}" />
</Grid>
<Grid Visibility="{Binding SelectedSecurityMode, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=Email}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Style="{StaticResource LabelDefaultStyle}" Content="{x:Static base:AppStrings.EmailAddress}" />
<wpfControls:TextBoxEx Grid.Column="1" Text="{Binding EmailAddress}" />
</Grid>
<Grid Visibility="{Binding SelectedSecurityMode, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=None}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="LabelColumn" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Style="{StaticResource LabelDefaultStyle}" Content="{x:Static base:AppStrings.Password}" IsEnabled="False" />
<wpfControls:TextBoxEx Grid.Column="1" IsEnabled="False" />
</Grid>
</StackPanel>
如您所见,第一列在更改
Visibility
后调整了大小。我想要的是,该列占用最大尺寸标签的空间,而不会在以后将所有可见性设置为 Collapsed
。这也会使 GUI 看起来不稳定。