Как стать автором
Обновить

Комментарии 11

Спасибо, интересный велосипед, конечно, но ничего принципиально нового. Всё так же мы объявляем номер столбца/строки для каждого элемента.
Лично мне было бы интересно вот что
Допустим, есть у нас грид с 10-ю строками. В каждой по много элементов. И вот нам понадобилось удрать строку №2 со всем её содержимым.
Как решить:
1 — удалить элементы из строки №2 и сделать её рамер = 0. Плохо, засоряем код.
2 — удалить элементы из строки №2 и саму строку тоже, а для элементов из нижних строк уменьшить Grid.Row на 1. Очень неудобно, т.к. элементов много.
Хотелось бы иметь возможность указывать номер строки/столбца не абсолютно, а как-нибудь относительно.
У самого пока руки не доходят, может Вам будет интересно :)
Blend — лучше для WPF-ера нет. Он сделает это автоматом.
Правда адекватным бленд стал только в новой версии.
Спасибо. Попробую.
Думал над вашим вопросом, и пришёл к выводу, что, возможно, не совсем вас понял.
Вы имеете в виду удаление элементов из строки во время работы XAML-дизайнера среды разработки?

Просто в статье описан механизм динамической смены состояния Grid именно во время работы приложения…
Это может быть полезным для сложных интерфейсов, например, когда приложение поддерживает портретную и альбомную ориентацию, и в зависимости от неё визуальные элементы нужно компоновать слегка по-разному, а создавать новую страницу с дублирующимся кодом не имеет смысла.
Да, я имею в виду редактирование разметки, не рантайм. Чтобы удалить строку, приходится редактировать Grid.Row элементов из строк ниже. Но тут уже предложили решения:
1. Говорят, Blend умный и умеет сам менять номера строк, когда надо.
2. StackGrid из Catel.
Правильнее, на мой взгляд, установить у ненужного элемента свойство Visibility в состояние Collased, либо же использовать ItemsControl. Даже если вы удалите строку номер два, то сам контрол останется в визуальном дереве и код останется засорён, если это можно так назвать.

Хотелось бы иметь возможность указывать номер строки/столбца не абсолютно, а как-нибудь относительно.

В статье описан сам принцип и базовый синтаксис, усовершенствовать реализацию можно как угодно, на что хватит фантазии :)
Код не стал лаконичнее. Даже наоборот, для новых сотрудников, читать подобное и каждый раз вспоминать становится сложнее.
+ ReSharper умеет работать с XAML и рефакторить в том числе колнки и строки у грида и его элементов. В вашем случае мы теряем такую возможность.
Решарпер, да, не понимает такую запись, но это не столь критичный недостаток.
Код не стал лаконичнее.

Конечно, у вас своё видение, но, по-моему, он стал компактнее в разы да и сложность его не такая высокая :)
На мой взгляд, лаконичнее выглядит нечто вроде StackGrid из Catel. В нём строки и столбцы задаются так же, как и в обычном Grid, а вот у содержимого задавать свойства уже необязательно, оно само раскладывается по ячейкам в порядке объявления. Есть также вспомогательные элементы EmptyCell, EmptyRow и EmptyColumn. Логики там на 2 экрана, можно и самому реализовать, если весь Catel тянуть не хочется.
Динамичным сделать такой грид ещё сложнее, чем обычный…
О, а вот это похоже на то, о чём я писал в первом комментарии. Спасибо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории