WPF: отключить ListBox, но включить прокрутку - PullRequest
8 голосов
/ 09 февраля 2009

Стучал мне по голове все это утро.

По сути, у меня есть список, и я хочу, чтобы люди не могли изменить выбор во время длительного процесса, но разрешить им продолжать прокрутку.

Решение:

Все ответы были хорошими, я пошел с глотанием событий мыши, так как это было самым прямым. Я связал PreviewMouseDown и PreviewMouseUp с одним событием, которое проверило мой backgroundWorker.IsBusy и установило ли свойство IsHandled для аргументов события значение true.

Ответы [ 11 ]

0 голосов
/ 16 февраля 2011

Другой вариант, который стоит рассмотреть, это отключение ListBoxItems. Это можно сделать, установив ItemContainerStyle, как показано в следующем фрагменте.

<ListBox ItemsSource="{Binding YourCollection}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsEnabled" Value="False" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

Если вы не хотите, чтобы текст был серым, вы можете указать отключенный цвет, добавив кисть к ресурсам стиля с помощью следующей клавиши: {x: Static SystemColors.GrayTextBrushKey}. Другое решение - переопределить шаблон элемента управления ListBoxItem.

Этот вопрос почти такой же, как этот: Нет ListBox.SelectionMode = «None», есть ли другой способ отключить выбор в списке? и мой ответ такой же.

...