Я бы не рекомендовал устанавливать высоту элементов управления на ноль - во-первых, все равно можно было бы перейти на элемент управления с 0-высотой, что, по меньшей мере, могло бы сбить пользователей с толку:)
В качестве альтернативы попробуйте связать видимость любых затронутых элементов управления с выбором комбинированного списка, например:
<UserControl xmlns:cnv="clr-namespace:your_namespace_here">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Label1:" />
<ListBox Grid.Row="0" Grid.Column="1" />
<Label Grid.Row="1" Grid.Column="0" Content="Label2:" />
<ComboBox Name="cbo" Grid.Row="1" Grid.Column="1" />
<Label Grid.Row="2" Grid.Column="0" Content="Label3:"
Visibility="{Binding ElementName=cbo, Path=SelectedIndex,
Converter={cnv:IntToVisibilityConverter}}" />
<TextBox Grid.Row="2" Grid.Column="1" />
</Grid>
В коде соберите конвертер, который возвращает соответствующий тип видимости:
namespace your_namespace_here
{
public class IntToVisibilityConverter : MarkupExtension, IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int _value = (int)value;
return (_value > 0) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
}
Обратите внимание, что в этом примере конвертер вернет Visiblity.Collapsed, если выбран первый элемент в комбинации, в противном случае Visiblity.Visible.
Неопробованный код, но метод звука. Надеюсь, что это полезно!