ListBox сохранить выбор после потери фокуса - PullRequest
1 голос
/ 08 октября 2008

У меня есть ListBox, который в фокусе, и когда у меня выбран элемент, возвращает действительный SelectedIndex. Если у меня есть действительный SelectedIndex и я нажимаю на TextBox на том же форуме, SelectedIndex теперь становится -1 Однако я хочу, чтобы его SelectedIndex не менялся. Как бы я поступил так?

Ответы [ 6 ]

3 голосов
/ 26 ноября 2013

Это старый вопрос, но в случае, если кто-то еще испытывает ту же проблему, проверьте ваш стиль ListBoxItem , особенно если вы используете один из стилей из тем WPF .

Проблема с темами WPF, в частности, заключается в включении раздел вне шаблона управления:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
....
<Style.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush po:Freeze="True" Color="{DynamicResource BlackColor}" />
                </Setter.Value>
            </Setter>
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
            <Setter Property="IsSelected" Value="true" />
        </Trigger>
    </Style.Triggers>
</Style>

Удалите Style.Triggers и проблема должна исчезнуть

3 голосов
/ 07 июня 2010

У меня была та же проблема, что и у оригинального постера. Я не мог понять это полностью, но кажется, что когда у вас есть список, связанный с наблюдаемой коллекцией, и коллекция изменяется, что выбранный элемент теряет фокус.

Я решил эту проблему, сохранив выбранный индекс в переменной и сбросив его, если выбранный индекс был равен -1 (и он был действителен для восстановления)

3 голосов
/ 08 октября 2008

ListBox сохранит свой SelectedIndex независимо от фокуса.

Я протестировал его на пустом проекте с одним ListBox, одним TextBox и одним Label, использованным для отображения SelectedIndex ListBox. Как в событиях ListBox SelectedIndexChanged, так и в событиях TextChanged TextBox я обновил метку с помощью SelectedIndex элемента ListBox

Должно быть что-то еще, что приведет к изменению выбранного индекса на -1.

2 голосов
/ 08 октября 2008

Обработайте событие SelectedIndexChanged и сохраните выбранное значение, чтобы вы могли восстановить его, когда ваш элемент управления восстановит фокус.

1 голос
/ 09 октября 2008

Эти элементы управления находятся в разных диалоговых окнах или, может быть, в разных вкладках контейнера с вкладками? Это единственный способ думать, что вы потеряете свой SelectedIndex при смене фокуса. В противном случае, как бы кто-нибудь, например, нажмите кнопку, чтобы выполнить действие с элементом? Вы потеряете выделение, когда фокус перейдет к нажатой кнопке ...

1 голос
/ 08 октября 2008

Я не проверял это в своих приложениях, но если свойство SelectedIndex изменяется, когда LB теряет фокус, вам, вероятно, придется обрабатывать этот случай самостоятельно, кэшируя последний выбранный индекс и сбрасывая его, когда элемент управления восстанавливает фокус. Вы можете сделать это в содержащей форме или в классе, производном от ListBox.

Вы можете даже попытаться установить выбранный индекс, как только увидите, что он становится -1. Не уверен, что произойдет, но мне было бы интересно узнать ...

Редактировать: только что протестировал и, как и другие постеры, я тоже не могу воспроизвести его. Должно быть что-то немного другое в вашем LB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...