Выбор всех ListBoxItems по двойному щелчку - PullRequest
0 голосов
/ 19 октября 2010

Я подключился к событию двойного щелчка ListBoxItems с помощью ff.код в моем XAML:

    <Style TargetType="{x:Type ListBoxItem}">
        <EventSetter Event="MouseDoubleClick" Handler="onMouseDoubleClickOnListBoxItem" />
    </Style>

Код для обработчика:

    private void onMouseDoubleClickOnListBoxItem(object sender, MouseButtonEventArgs e)
    {
        Debug.Print("Going to select all.");
        listBox.SelectAll();
        Debug.Print("Selected all.");
    }

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

1 Ответ

1 голос
/ 19 октября 2010

Попробуйте использовать SelectionMode как несколько.

Обновлено,

В расширенном режиме элемент, для которого выполняется двойной щелчок, сбрасывается как SelectedItem, потому что в том же потоке действие события щелчкавыбора одного элемента выполняется.

Для достижения этой цели был обработчик события двойного щелчка, который я вызываю (begin invoke - это async), метод делегата (в области видимости класса) и оттуда вызываем SelectAll.вызов списка в главном окне Диспетчера.

Как,

// delegate
delegate void ChangeViewStateDelegate ();

// on double click event invoke the custom method
private void onMouseDoubleClickOnListBoxItem (object sender, MouseButtonEventArgs e) {
    ChangeViewStateDelegate handler = new ChangeViewStateDelegate (Update);
    handler.BeginInvoke (null, null);
}

// in the custom method invoke the selectall function on the main window (UI which created the listbox) thread
private void Update () {
    ChangeViewStateDelegate handler = new ChangeViewStateDelegate (UIUpdate);
    this.Dispatcher.BeginInvoke (handler, null);
}

// call listbox.SelectAll
private void UIUpdate () {
    lstBox.SelectAll ();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...