WPF Datagrid отменяет выбор строки, когда управление отключено - PullRequest
3 голосов
/ 09 марта 2010

У меня есть программа, в которой пользователь выбирает строку в таблице данных и затем нажимает кнопку «Начать запись». Во время «записи» им не разрешено изменять значение, выбранное в сетке данных, поэтому я установил для IsEnabled значение false. Однако, когда сетка данных отключена, она отменяет выделение выбранной строки, что приводит к повреждению любых имеющихся у меня привязок к свойству SelectedItem сетки данных.

Есть ли способ сохранить выбранную строку таблицы данных, даже если элемент управления отключен?

Редактировать: это не происходит в Windows Vista, но в Windows 7.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2010

Извините, я знаю, что этот пост немного старый, но я не мог найти другое решение для этого где-либо еще.

Похоже, это связано не с Vista \ 7, а с выпуском Toolkit в феврале.

Вы можете установить IsHitTestVisible = false, как предполагает Джефф Уэйн, но, как заметил Майк, это не выглядит иначе. Кроме того, он не отключает ввод с клавиатуры.

Мое решение состоит в том, чтобы поместить DataGrid в таблицу в той же строке и столбце, что и полупрозрачный серый прямоугольник (это сделает их поверх друг друга). Вы должны поместить прямоугольник в Grid, чтобы убедиться, что он находится над DataGrid. Когда я хочу отключить его, я делаю прямоугольник видимым. Это заставит список выглядеть тусклым и отключить ввод с помощью мыши, но все равно не отключит ввод с клавиатуры.

Чтобы отключить клавиатуру, я должен перехватить «PreviewKeyDown» и установить e.Handdled = true. Это не позволит выбрать что-либо еще, но все равно будет делать некоторые интересные вещи, когда вы вкладываете в него вкладку (например, вкладка больше не работает). Возможно, установка его не как табуляции и не для фокусировки также исправит это, но отключение выделения - это все, что меня действительно волнует.

0 голосов
/ 21 июля 2010

IsHitTestVisible = false отключает ввод мыши.

Для отключения ввода с клавиатуры установите Focusable = false.

Оба должны быть установлены с помощью стиля в ElementStyle и / или ElementEditingStyle для встроенного столбца сетки данных, чтобы дочерний элемент управления (текстовое поле, флажок и т.д.) не принимал ввод.

Скорее всего, вам придется использовать триггер в стиле и привязать его к некоторому значению IsRecording.

Также вы можете, в том же стиле, изменить внешний вид «отключенных» элементов управления, установив их непрозрачность = 0,4, это дает им некоторое ощущение неработоспособности.

0 голосов
/ 10 марта 2010

Если вы действительно хотите «записывать» действия, но при этом визуальные эффекты и взаимодействия выглядят одинаково, почему бы просто не добавить проверку к событию, инициированному при выборе, чтобы убедиться, что запись не происходит, и установить e.Handled = true.

В качестве альтернативы вы можете установить IsHitTestVisible = false и запретить им выполнять какие-либо действия в элементе управления вместо его прямого отключения.

Надеюсь, это поможет.

...