WPF Listbox + Expander eventos

Tengo un Expander en el ItemTemplate de un ListBox. Renders bien. El problema que me encontré es que me gustaría que el evento ListBox_SelectionChanged se dispare cuando el expansor se expande y / o selecciona. El evento MouseDown no parece aumentar hasta el ListBox.

Lo que necesito es el SelectedIndex del ListBox. Debido a que ListBox_SelectionChanged no se activa, el índice es -1 y no puedo determinar qué elemento ha sido seleccionado.

El evento ListBox_SelectionChanged se activa si un usuario hace clic en el contenido del expansor después de que se haya expandido. Si solo hacen clic en el expansor, el evento no se activa. Esto es confuso para el usuario porque visualmente, piensan que ya han hecho clic en ese elemento cuando en realidad hacen clic en el encabezado de expansión. Necesito que se seleccione el elemento ListBox cuando el usuario expande el expansor porque, en lo que respecta al usuario, el elemento ahora está seleccionado cuando realmente no lo está.

¿Alguna sugerencia sobre cómo hacer que esto funcione o formas alternativas de determinar el índice de selección del cuadro de lista con expansores en él?

Código simplificado para referencia:

<Window x:Class="WpfApplication3.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    Loaded="Window_Loaded">
    <Grid Name="Root">
        <ScrollViewer>
            <ListBox SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding}">
                <ItemsControl.ItemTemplate >
                    <DataTemplate>
                        <Border>
                            <Expander>
                                <Expander.Header>
                                    <TextBlock Text="{Binding Path=Name}"/>
                                </Expander.Header>
                                <Expander.Content>
                                    <StackPanel>
                                        <TextBlock Text="{Binding Path=Age}"/>
                                        <TextBlock Text="Line 2"/>
                                        <TextBlock Text="Line 3"/>
                                    </StackPanel>
                                </Expander.Content>
                            </Expander>
                        </Border>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ListBox>
        </ScrollViewer>
    </Grid>
</Window>

Clase simple para encuadernación:

public class Person
{
    public string Name {
        get;
        set;
    }

    public int Age {
        get;
        set;
    }
}

Creando y poblando los datos para vincular:

private void Window_Loaded(object sender, RoutedEventArgs e) {

    data = new ObservableCollection<Person>();

    data.Add(new Person {
        Name = "One",
        Age=10
    });

    data.Add(new Person {
        Name = "Two",
        Age = 20
    });

    data.Add(new Person {
        Name = "Three",
        Age = 30
    });

    Root.DataContext = data;
}

Este es el evento que necesito (realmente solo el SelectedIndex que necesito)

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    ListBox box = (ListBox)sender;

    // This value is not set because events from Expander are not bubbled up to fire SelectionChanged Event
    int index = box.SelectedIndex;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta