Burnt a little time on this one: I had a WPF Expander inside a ListBox and couldn’t get the Expander to align to the top when one expander was collapsed and another expander was uncollapsed.  Consider the following XAML:

  
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"; 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml";> <Grid> <ListBox VerticalAlignment="Top"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel IsItemsHost="True" Orientation="Horizontal"/> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBoxItem> <Expander ExpandDirection="Right"> <Grid> <ListBox> <ListBox.Items> <ListBoxItem Name="Item0">Option 0 </ListBoxItem> <ListBoxItem Name="Item1">Option 1 </ListBoxItem> <ListBoxItem Name="Item2">Option 2 </ListBoxItem> </ListBox.Items> </ListBox> </Grid> </Expander> </ListBoxItem> <ListBoxItem> <Expander ExpandDirection="Right"> <Grid> <ListBox> <ListBox.Items> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> <ListBoxItem>Option 0 </ListBoxItem> <ListBoxItem>Option 1 </ListBoxItem> <ListBoxItem>Option 2 </ListBoxItem> </ListBox.Items> </ListBox> </Grid> </Expander> </ListBoxItem> </ListBox> </Grid> </Page>

It would look fine if both were collapsed:

But if one was collapsed and one wasn’t:

Or even if both were uncollapsed:

It wouldn’t align. It was driving me crazy. I snooped around and tried all kinds of shenanigans in various control templates and styles to make it behave. But it turned out the fix was easy: I needed to set the VerticalAlignment on the ListboxItem itself as follows. (See bold.)

  
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml";>  
   <Grid>
      <ListBox VerticalAlignment="Top">
         <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
               <StackPanel IsItemsHost="True" Orientation="Horizontal"/>
            </ItemsPanelTemplate>
         </ListBox.ItemsPanel>
         <ListBoxItem VerticalAlignment="Top">
            <Expander ExpandDirection="Right">
               <Grid>
                  <ListBox>
                     <ListBox.Items>
                        <ListBoxItem Name="Item0">Option 0

                        </ListBoxItem>
                        <ListBoxItem Name="Item1">Option 1

                        </ListBoxItem>
                        <ListBoxItem Name="Item2">Option 2

                        </ListBoxItem>
                     </ListBox.Items>
                  </ListBox>
               </Grid>
            </Expander>
         </ListBoxItem>
         <ListBoxItem  VerticalAlignment="Top">
            <Expander ExpandDirection="Right">
               <Grid>
                  <ListBox>
                     <ListBox.Items>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                        <ListBoxItem>Option 0

                        </ListBoxItem>
                        <ListBoxItem>Option 1

                        </ListBoxItem>
                        <ListBoxItem>Option 2

                        </ListBoxItem>
                     </ListBox.Items>
                  </ListBox>
               </Grid>
            </Expander>
         </ListBoxItem>
      </ListBox>
   </Grid>
</Page>

And then I got:

Yeah! I could of course put this in a style, etc.  And if this were a datatemplate instead of a listboxitem, I would style the listboxitem.

(Shout out to KAXAML as tool of choice when breaking down problems like this…)