Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 28.10.10 19:46
Оценка: 21 (2)
Всем добрый вечер!

С установкой .NET F-k 4.0 и перевода проекта на него с .NET F-k 3.5 обнаружил странное и очень раздражающее поведение контрола GridSplitter в WPF. Постараюсь описать максимально понятно ситуацию.

Есть Grid. Внутри него разделение на 3 области. Центральная и боковые, как в VS. Чтобы было удобно, добавил сплиттеры, чтобы можно было скрывать если не нужно боковые области.

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

Очень неприятная проблема и раздражает очень сильно. Сталкивался ли кто-нибудь с подобным?


Буду благодарен за любую помощь!

29.10.10 11:44: Перенесено из '.NET'
.net c# wpf
Re: Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 28.10.10 20:20
Оценка:
Вот ссылка на проект, в котором можно наблюдать данный феномен:
http://file.qip.ru/file/BbZjshPY/WpfApplication2.html?
Re: Странное поведение контрола GridSplitter в WPF.
От: Sinix  
Дата: 29.10.10 05:08
Оценка:
Здравствуйте, Svat_P, Вы писали:

S_P>С установкой .NET F-k 4.0 и перевода проекта на него с .NET F-k 3.5 обнаружил странное и очень раздражающее поведение контрола GridSplitter в WPF. Постараюсь описать максимально понятно ситуацию.


Проверил — баг. В XAML вроде особого криминала нет (если не считать харкодинга размеров и лэйаута).

Советую запостить на connect.
Re: Странное поведение контрола GridSplitter в WPF.
От: Fortnum  
Дата: 29.10.10 16:21
Оценка: 6 (1)
Здравствуйте, Svat_P, Вы писали:

S_P>Буду благодарен за любую помощь!


Поставь временно Splitter'ам ShowsPreview="True". При этом все ОК даже если двигать сплиттеры стрелочками <- -> на клаве.
Re[2]: Странное поведение контрола GridSplitter в WPF.
От: Fortnum  
Дата: 29.10.10 16:32
Оценка:
Здравствуйте, Svat_P, Вы писали:

S_P>Вот ссылка на проект, в котором можно наблюдать данный феномен:

S_P>http://file.qip.ru/file/BbZjshPY/WpfApplication2.html?

Ппц. У меня такой феномен наблюдается: если у окна в этом проекте просто убрать Width="640" Height="480" , то при запуске программа висит и съедает 100% процессорного времени! Возвращаешь Width="640" Height="480" обратно, и она хотя бы запускается.
Re[3]: Странное поведение контрола GridSplitter в WPF.
От: Fortnum  
Дата: 29.10.10 16:35
Оценка:
Здравствуйте, Fortnum, Вы писали:

F>Ппц. У меня такой феномен наблюдается: если у окна в этом проекте просто убрать Width="640" Height="480" , то при запуске программа висит и съедает 100% процессорного времени! Возвращаешь Width="640" Height="480" обратно, и она хотя бы запускается.


Сменил Target Framework на .NET 3.5 Client Profile, эффект Width="640" Height="480" пропал. В том смысле, что ни с Width="640" Height="480" , ни без них, программа не запускается — виснет. Теперь помогает убрать WindowState="Maximized" Тогда запускается и с Width="640" Height="480".

Ты написал Убийцу .NET!
Re[4]: Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 29.10.10 16:39
Оценка: +1
Здравствуйте, Fortnum, Вы писали:

F>Здравствуйте, Fortnum, Вы писали:


F>>Ппц. У меня такой феномен наблюдается: если у окна в этом проекте просто убрать Width="640" Height="480" , то при запуске программа висит и съедает 100% процессорного времени! Возвращаешь Width="640" Height="480" обратно, и она хотя бы запускается.


F>Сменил Target Framework на .NET 3.5 Client Profile, эффект Width="640" Height="480" пропал. В том смысле, что ни с Width="640" Height="480" , ни без них, программа не запускается — виснет. Теперь помогает убрать WindowState="Maximized" :)) Тогда запускается и с Width="640" Height="480".


F>Ты написал Убийцу .NET!


Microsoft начинает очень сильно разочаровывать! =(
Re[5]: Странное поведение контрола GridSplitter в WPF.
От: Fortnum  
Дата: 29.10.10 16:46
Оценка:
Здравствуйте, Svat_P, Вы писали:

S_P>Microsoft начинает очень сильно разочаровывать! =(


Согласен. Чего одна NotifyPartitionIsZombie стоит. Но преимуществ все-таки больше
Re[6]: Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 29.10.10 18:05
Оценка:
Здравствуйте, Fortnum, Вы писали:

F>Здравствуйте, Svat_P, Вы писали:


S_P>>Microsoft начинает очень сильно разочаровывать! =(


F>Согласен. Чего одна NotifyPartitionIsZombie стоит. Но преимуществ все-таки больше ;)


Да уж... Всеравно обидно, что косяки вылазят там где их совсем не ожидаешь.
Re: Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 30.10.10 12:00
Оценка: 9 (1)
Здравствуйте, Svat_P, Вы писали:

S_P>Всем добрый вечер!


S_P>С установкой .NET F-k 4.0 и перевода проекта на него с .NET F-k 3.5 обнаружил странное и очень раздражающее поведение контрола GridSplitter в WPF. Постараюсь описать максимально понятно ситуацию.


S_P>Есть Grid. Внутри него разделение на 3 области. Центральная и боковые, как в VS. Чтобы было удобно, добавил сплиттеры, чтобы можно было скрывать если не нужно боковые области.


S_P>Теперь описание претензии к данному контролу. Когда начинаю производить ресайз области с помощью мыши, граница (область, в которой находится сплиттер) часто резко прыгает в какую либо сторону и перестает реагировать на движения мыши или в место, где она (граница) находилась до момента произведения действия.


S_P>Очень неприятная проблема и раздражает очень сильно. Сталкивался ли кто-нибудь с подобным?



S_P>Буду благодарен за любую помощь!


На msdn предложили такое решение:

<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="7" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="7" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

Вроде работает, но если сплиттер вывести на слой выше чем его украшения, то ситуация становится опять такой же как и была.
Re: Странное поведение контрола GridSplitter в WPF.
От: Sinix  
Дата: 30.10.10 12:18
Оценка: 14 (2)
Здравствуйте, Svat_P, Вы писали:
Оказывается, это известный баг.

В качестве workaround предлагают увеличить DragIncrement.

Проблема известна с 2007го. Всё гиперсложное исправление бага (как пишут) — замена вызова MS.Internal.DoubleUtil.AreClose(...) на System.Windows.LayoutDoubleUtil.AreClose(...).

Судя по комменту

Posted by Microsoft on 8/21/2009 at 2:35 PM
I do understand your concern, but we are beyond our ZBB date, therefore only ship-blocker bugs make the bar at this point. Considering that we have shipped this bug before, it is hard to make a case that we need to fix it in this release since it did not block our previous release. Thank you.

с исправлением ошибок не просто плохо, а очень плохо. Мдя. Windows team уже закидали бы тапками

Как бы им намекнуть, что пора как-то менять процесс разработки?
Re[2]: Странное поведение контрола GridSplitter в WPF.
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 30.10.10 12:48
Оценка: +2
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Svat_P, Вы писали:

S>Оказывается, это известный баг.

S>В качестве workaround предлагают увеличить DragIncrement.


S>Проблема известна с 2007го. Всё гиперсложное исправление бага (как пишут) — замена вызова MS.Internal.DoubleUtil.AreClose(...) на System.Windows.LayoutDoubleUtil.AreClose(...).


S>Судя по комменту

S>

S>Posted by Microsoft on 8/21/2009 at 2:35 PM
S>I do understand your concern, but we are beyond our ZBB date, therefore only ship-blocker bugs make the bar at this point. Considering that we have shipped this bug before, it is hard to make a case that we need to fix it in this release since it did not block our previous release. Thank you.

S>с исправлением ошибок не просто плохо, а очень плохо. Мдя. Windows team уже закидали бы тапками:(

S>Как бы им намекнуть, что пора как-то менять процесс разработки?


Сума сойти... 3 с лишним года и одни и те же грабли.

P.S.: Теперь становится понятно почему в VS 2010 когда производим ресайз границ, у нас ничего не перерисовывается, а передвигается только "тень" границы. Те они знают и ничего не исправляют. Причем сами же просто тупо обходят эти грабли. Хотя бы в документации писали о существующем баге.
Re: Странное поведение контрола GridSplitter в WPF.
От: Vladek Россия Github
Дата: 30.10.10 20:32
Оценка: 9 (1)
Здравствуйте, Svat_P, Вы писали:

S_P>Буду благодарен за любую помощь!


Задайте (и делайте так всегда) каждому GridSplitter-у явно следующие свойства: Width, HorizontalAlignment и VerticalAlignment. В данном случае достаточно добавить Width="7".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.