|
Иерархический DataGrid, как правильно оформить контрол?
|
|||
---|---|---|---|
#18+
Проект на WPF framework 3.5 sp1 c использованием WPFToolKit. Задача: Необходимо в DataGrid отображать иерархические данные. Найденное решение: 1. Пишется шаблон для DataGridTemplateColumn, который имитирует дерево и стоит всегда слева, т.е. в нём ToggleButton с переопределённым стилем, который теперь похож на "+" когда свёрнуто и "-" когда развёрнуто и TextBlock для текста. 2. Пишутся конверторы которые управляют свойством Margin для имитации вложенности элементов в ветви, видимостью ToggleButton, если нет детей и т.д. 3. Для ToggleButton пишутся методы для отображение и скрытия строк в DataGrid с использованием свойства строк Visability. Всё это чуть дышет, нужна отладка, но не суть, вопрос в другом, это общее состояние дел... Проблемма: Данный контрол будет использоваться в нескольких местах, необходимо избежать дублирования кода шаблона и методов То, как решаю проблему: 1. Хочу оформить контрол в отдельной сборке 2. Создаю новый проект WPF Custom Control Library соответственно имею класс, который наследую от DataGrid (в него помещу необходимые методы) и файл Generic.xaml, в котором определён ResourceDictionary (в него помещу шаблон DataGridTemplateColumn). Пока экспериментирую просто с DataGridTextColumn, при таком подходе ресурсы нужно будет делить между несколькими сборками, потому x:Key следующего вида Код: c# 1. 2. 3. 4. 5.
Далее добавляю в другой проект References на мою сборку, кидаю на форму новый DataGrid и пытаюсь добавить столбцы из ресурсов другой сборки так: Код: c# 1. 2. 3. 4. 5. 6. 7.
В результате имею ошибку: авторProperty 'Columns' does not support values of type 'DynamicResourceExtension'. Если объявлять DataGridTextColumn в ресурсах того же проекта и использовать следующий синтаксис: Код: c# 1. 2. 3. 4. 5.
То вполне логично что всё работает, но получается нет разделение на сборки. В общем вопрос: Можно ли как то обойти эксепшен и создать проект в отдельной сборке, либо придётся делать его в той же, где и предполагается использовать? Либо я вообще выбрал не правильный способ построения контрола и/или расположения шаблона и нужно как то делать по другому, либо вообще нужно по другому строить сам контрол... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2012, 15:07 |
|
Иерархический DataGrid, как правильно оформить контрол?
|
|||
---|---|---|---|
#18+
Nuki_Nuki, сборки можешь разделять, как хочешь. Только делай на них ссылки в заголовке: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2012, 15:22 |
|
Иерархический DataGrid, как правильно оформить контрол?
|
|||
---|---|---|---|
#18+
hex.style, Это сделал уже, извиняюсь, не до конца в пример вставил, там просто в части Код: c# 1.
она TDG называется... Если этим способом делать что нить другое, например BackGround - то всё работает, проблемма именно в том, что столбцы DataGrid не поддерживают динамические ресурсы, ну как я понял из эксепшена, вот думаю можно ли как то это обойти и оставить их в ресурсе другой сборки... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2012, 15:56 |
|
Иерархический DataGrid, как правильно оформить контрол?
|
|||
---|---|---|---|
#18+
Nuki_Nukihex.style, Это сделал уже, извиняюсь, не до конца в пример вставил, там просто в части Код: c# 1.
она TDG называется... Если этим способом делать что нить другое, например BackGround - то всё работает, проблемма именно в том, что столбцы DataGrid не поддерживают динамические ресурсы, ну как я понял из эксепшена, вот думаю можно ли как то это обойти и оставить их в ресурсе другой сборки... Какие-то танцы с бубном... пример в студию! =) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2012, 16:36 |
|
Иерархический DataGrid, как правильно оформить контрол?
|
|||
---|---|---|---|
#18+
В общем может быть кому-нить пригодится: Для обхода эксепшена и расположения столбцов DataGrid в разных сборках - применять динамические ресурсы нельзя, следовательно идём другим путём: 1. Создаём в папке Themes словарь ресурсов Resources.xaml, и помещаем столбец в него, а не в Generic.xaml Код: c# 1. 2.
2. Подключаем референс на созданную сборку с новым datagrid и в файле App.xaml прописываем ссылку на ресурсы другой стобрки: Код: c# 1. 2. 3. 4.
В результате имеем статический ресурс другой сборки, ну и соответственно далее работаем как обычно: Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2012, 10:57 |
|
|
start [/forum/topic.php?fid=21&fpage=37&tid=1441689]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 119ms |
0 / 0 |