Weird ситуация, у меня есть следующий код XAML:WPF ListBox, то SelectedIndex не выделенная строка
<StackPanel>
<TextBlock>Logging here...</TextBlock>
<ListBox x:Name="LoggingListBox" ItemsSource="{Binding Log}" />
</StackPanel>
Мой источник находится всего в 5 строк текста в ObservableCollection<string>
, и я выбираю 4-ю строку:
LoggingListBox.SelectedIndex = 3;
Но он показывает следующее:
Как вы можете видеть, у 3-го элемента есть граница, но почему первая строка выделена?
Кто-нибудь понял, что происходит?
Update 1/17/17: Я сделал меньшую демо-версию этой проблемы.
1) Новый проект WPF
2) MainWindow.xaml:
<Window x:Class="ListBoxSelectionTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<StackPanel>
<TextBlock>Logging here...</TextBlock>
<ListBox x:Name="LoggingListBox" ItemsSource="{Binding Log}" />
</StackPanel>
</Window>
3) Код позади:
public partial class MainWindow
{
public ObservableCollection<string> Log { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Log = new ObservableCollection<string>();
Log.CollectionChanged += (o, e) => LoggingListBox.SelectedItem = Log.Last();
Log.Add("Adding instrument: Unknown:#22");
Log.Add("Adding instrument: Unknown:#22");
Log.Add("Adding instrument: Unknown:#22");
Log.Add("Adding instrument: Unknown:#22");
Log.Add("Adding instrument: Unknown:#22");
}
}
4: Запуск программы: Похоже это на старте:
5: Нажмите кнопку TAB (фокус устанавливается ListBox), и теперь выглядит следующим образом:
Я подозреваю, что я каким-то образом устанавливая выбор из надлежащего порядка WPF действительно хочет.
Странно, если это единственный код, который находится в игре, все должно работать. Какой метод «SelectionMode» вы используете? Вы делаете что-нибудь еще с выбором, кроме установки SelectedIndex? Где вы называете изменение выбранного индекса (т. Е. Обработчик нажатия кнопки)? – icebat