Форма описывается в XAML:
<ComboBox Name="comboPartitionTypes" SelectedIndex="0" SelectionChanged="comboPartitionTypes_SelectionChanged">
<ComboBoxItem Content="partition1" />
<ComboBoxItem Content="partition2" />
</ComboBox>
<StackPanel Name="panel1"></StackPanel>
<StackPanel Name="panel2"></StackPanel>
При изменении выбранного элемента списка должен отобразится соответствующий StackPanel:
private void comboPartitionTypes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (comboPartitionTypes.SelectedIndex)
{
case 0:
panel1.Visibility = System.Windows.Visibility.Visible;
panel2.Visibility = System.Windows.Visibility.Hidden;
break;
case 1:
panel1.Visibility = System.Windows.Visibility.Hidden;
panel2.Visibility = System.Windows.Visibility.Visible;
break;
}
}
Событие comboPartitionTypes_SelectionChanged при указанном в XAML comboPartitionTypes.SelectedIndex отрабатывает еще до инициализации StackPanel, в результате panel1 и panel2 равны null. Если убрать comboPartitionTypes.SelectedIndex, то все отлично, но форма не красивая без выбранного элемента. Приходится в начале обработчика события писать
private void comboPartitionTypes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!IsLoaded) return;
Где логика такого поведения? Почему сначала не нарисовать все элементы на форму, а потом уже запускать обработку событий?