Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
Читаю книжку и разглядываю примеры. Дошел до главы 13 и нашел неработающий пример ListColorsElegantly (конвертирую и открываю 10-й студией). Проблему я обошел, но не понимаю почему она возникает. Проблема возникает в ListColorsElegantly.ListBoxOnSelectionChanged. Не понятно, почему при первом вызове ListBoxOnSelectionChanged lstbox.SelectedIndex = 137, SelectedItem = White, а вот SelectedValue = null? При повторных вызовах все нормально, а вот при первом такая вот проблема. Проект примера положил на http://dump.ru/file/5663172. Почему такое происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 12:27 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 12:39 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
Lexxxxx, selectedindex надо устанавливать и все будет ок. а там selectedvalue устанавливается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 13:55 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
AlexeiK, Где там? В ColorListBox.SelectedColor? И почему все последующие вызовы, кроме первого, работают нормально?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 14:53 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
Lexxxxx, Код: c# 1. на Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 16:04 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
AlexeiK, При таком подходе нам нужно знать конкретный номер цвета, а кто его знает какой он там в общем случае и не меняется ли он (я знаю что при текущей реализации IEnumerable он будет всегда один и высмотреть его не сложно, но я говорю об общем случае). Это не то, для чего писалась вся эта конструкция. Ведь свойство SelectedColor было специально сделано для того, чтобы на "человеческом языке" задавать выбранный цвет. При lstbox.SelectedColor = SystemColors.WindowColor; происходит SelectedValue = value; и вызов ListBoxOnSelectionChanged в момент когда SelectedIndex и SelectedItem уже установлены, а вот SelectedValue все еще = null. Видимо это особенность сеттера ListBox.SelectedValue. А вот при интерактивном изменении выбранного айтема вызов ListBoxOnSelectionChanged происходит в момент, когда уже все три свойства имеют новые значения. Может ли такое быть (что на мой взгляд довольно странно), или я просто запутался в отладчике? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 16:51 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
Lexxxxx, твоя ошибка, в этом авторедь свойство SelectedColor было специально сделано для того, чтобы на "человеческом языке" задавать выбранный цвет. Это не правда. Ты это придумал или не так понял или еще чтото. Код: c# 1. 2. 3. 4. 5. Этот selectedcolor обертка над selectedvalue, которое является по сути геттером. попробуй установи в него че нито :) и ничего не установится. Это поле нужно совсем для другого. Оно в себе содержит значение поля класса, которое ты указал в selectedvaluepath. далее.... смотри: dataitem оборачивается в listboxitem. все что мы видим и куда можем тыкнуть это listboxitem. в данном случае ColorListBoxItem. ты хочешь указать dataitem типа colors.blue и заставить листбокс перейти и выделить этот ColorListBoxItem. и как должен листбокс, найти тот ColorListBoxItem в котором colors.blue лежит? Ответ:никак. Можно пробежаться по всем items и найти подходящий, и установить у него свойство isselected. но и тут есть ньанс. у тебя листбокс с виртуализацией, и можно выделить только те item , которые существуют. а те что существуют ты их и видишь. все что ты не видишь, их в принципе нету. И вопрос, как ты дойдешь до последнего в списке программно, если его нету в принципе? Вариант: ты заставишь прокрутиться srollviewer до нужной позиции и он отдаст команду, на генерацию item . и тогда можно его будет выделить последний в списке. можешь переключить листбокс в обычный режим, где все items сразу создаются, а не по мере попадания в область видиния. и тогда сможешь выделить сразу, без заморачивания с прокруткой. еще есть scrollintoview Код: c# 1. 2. вот так можешь сделать. притом отдавай себе отчет, что getitemAt берет dataitem. потом этот dataitem отдается в scrollintoview и он уже сам все считает и крутится до нужной позиции, потом отдает команду на создание colorlistboxitem со всеми dataitem которые попали в обзор. в том числе он гарантирует, что в обзор попадет твой dataitem. дальше вы помечаем isselected у colorlistboxitem с нужным dataitem и он подсвечивается выделенным. подсветка делается с в помощью selectedindex. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 17:52 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
AlexeiKвсе что мы видим и куда можем тыкнуть это listboxitem. в данном случае ColorListBoxItem. ты хочешь указать dataitem типа colors.blue и заставить листбокс перейти и выделить этот ColorListBoxItem. и как должен листбокс, найти тот ColorListBoxItem в котором colors.blue лежит? Ответ:никак. Можно пробежаться по всем items и найти подходящий, и установить у него свойство isselected. Ну собственно я так и думал что он это делает. Раз есть сеттер у SelectedValue то должен же он как-то находить среди своих айтемов нужный. AlexeiKно и тут есть ньанс. у тебя листбокс с виртуализацией, По чем видать? Поиск по буквам "вирту" в доке листбокса ничего не показал. AlexeiKИ вопрос, как ты дойдешь до последнего в списке программно, если его нету в принципе? Ну а в его Items должны же быть все. Чет я совсем ничего не понимаю! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 18:46 |
|
||
|
Пример из книги Петцольда Microsoft WPF ListColorsElegantly
|
|||
|---|---|---|---|
|
#18+
AlexeiK, Дальнейшие эксперименты показали что при программной установке SelectedValue через ListColorsElegantly.SelectedColor в момент вызова ListBoxOnSelectionChanged свойство SelectedValue содержит значение, установленное в прошлый раз (соответственно в первый раз null), а вот свойства SelectedIndex и SelectedItem содержат уже новые значения, соответствующие новому значению SelectedValue. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 18:54 |
|
||
|
|

start [/forum/topic.php?fid=21&msg=37718641&tid=1441873]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 328ms |

| 0 / 0 |
