WPF Listbox + Expander событий

У меня есть Expander в ItemTemplate ListBox. Оказывает нормально. Проблема, с которой я столкнулся, заключается в том, что я хотел бы, чтобы событие ListBox_SelectionChanged сработало, когда расширитель развернут и / или выбран. Кажется, что событие MouseDown не всплывает до ListBox.

Что мне нужно, это SelectedIndex ListBox. Поскольку ListBox_SelectionChanged не запускается, индекс равен -1, и я не могу определить, какой элемент был выбран.

Событие ListBox_SelectionChanged наступает, если пользователь нажимает на Контент Расширителя после его расширения. Если они только нажимают на расширитель, событие не запускается. Это сбивает с толку пользователей, потому что визуально они думают, что уже щелкнули по этому элементу, фактически нажимая на заголовок расширителя. Мне нужно, чтобы элемент ListBox был выбран, когда пользователь расширяет Expander, потому что для пользователя этот элемент теперь выбран, когда он действительно отсутствует.

Любое предложение о том, как заставить это работать или альтернативные способы определения SelectedIndex списка со вставками в нем?

Упрощенный код для справки:

<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>

Простой класс для Binding:

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

    public int Age {
        get;
        set;
    }
}

Создание и заполнение данных для привязки:

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;
}

Это событие мне нужно (на самом деле мне нужен только SelectedIndex)

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;
}

Ответы на вопрос(3)

Ваш ответ на вопрос