[WPF] Styles,Triggers, DataTemplates
От: a_yenzh  
Дата: 21.07.09 17:01
Оценка:
Всем добрый вечер,
Возникла задачка нормального решения которой пока не вижу.
Хочется добиться настраиваемости ячеек грида (font, background...) на основании данных бизнес объектов
Например: Person (30< Age < 40 — синий фон , Age > 40 — красный....)
но чтоб это можно было настраивать на работающей системе.
хочется вынести эти стайлы в отдельный файл:
потом
Style style = (Style)XamlReader.Load(stream)
this.Resource["foo1"] = style;
Но в триггерах я так понял жесткое условие на равенство ( в Condition's) (как быть с выражениями типа > <... непонимаю ? можно конечно сделать конвертер
31-> 30
32-> 30... а в триггере прописывать условие на = 30 но как то криво при этом конвертер тоже должен брать где то отдельно что во что конвертить а еще в придачу на каждый грид свой конвертер хочеться универсальности)
Другой наверное вариант с TemplateSelector — вынести темплейты в отдельный файл и потом конфигурить, но тоже блин там байндинги надо указывать (воощем тоже шило какое то)

Буду рад любой информации.
Заранее благодарен
Re: [WPF] Styles,Triggers, DataTemplates
От: notacat  
Дата: 21.07.09 17:13
Оценка:
_>Другой наверное вариант с TemplateSelector — вынести темплейты в отдельный файл и потом конфигурить, но тоже блин там байндинги надо указывать
По моему, TemplateSelector или StyleSelector — самое то. Может StyleSelector попроще будет, если нужно только какие-то простые свойства менять.
Re: [WPF] Styles,Triggers, DataTemplates
От: MxKazan Португалия  
Дата: 21.07.09 17:21
Оценка:
Здравствуйте, a_yenzh, Вы писали:

_>Буду рад любой информации.

_>Заранее благодарен
Я так и не понял, проблема то в чем? Задать хитрые условия в Conditions? Ну, пожалуй, различные виды сравнений не так то просто реализовать в общем случае. Наверное только через Emit, но тут я слабоват... Зато равенство легко реализовать через Equals... Поэтому скорее всего остается вариант с конвертером.
Re: [WPF] Styles,Triggers, DataTemplates
От: Codechanger Россия  
Дата: 21.07.09 17:36
Оценка: 4 (1) +1
Здравствуйте, a_yenzh, Вы писали:

_>Всем добрый вечер,

_>Возникла задачка нормального решения которой пока не вижу.
_>Хочется добиться настраиваемости ячеек грида (font, background...) на основании данных бизнес объектов
_>Например: Person (30< Age < 40 — синий фон , Age > 40 — красный....)
_>но чтоб это можно было настраивать на работающей системе.
_>хочется вынести эти стайлы в отдельный файл:
_>потом
_> Style style = (Style)XamlReader.Load(stream)
_> this.Resource["foo1"] = style;
_>Но в триггерах я так понял жесткое условие на равенство ( в Condition's) (как быть с выражениями типа > <... непонимаю ? можно конечно сделать конвертер
31->> 30
32->> 30... а в триггере прописывать условие на = 30 но как то криво при этом конвертер тоже должен брать где то отдельно что во что конвертить а еще в придачу на каждый грид свой конвертер хочеться универсальности)
_>Другой наверное вариант с TemplateSelector — вынести темплейты в отдельный файл и потом конфигурить, но тоже блин там байндинги надо указывать (воощем тоже шило какое то)

_>Буду рад любой информации.

_>Заранее благодарен

ValueConverter вам в помощь.Точнее даже MultiValueConverter,будет более похоже на то, что вам нужно, а именно: код конвертера не меняется, меняются только его параметры. Допустим, первый параметр — максимальное значение, второй — минимальное — третий — возвращаемый цвет.
Re[2]: [WPF] Styles,Triggers, DataTemplates
От: a_yenzh  
Дата: 22.07.09 16:59
Оценка:
Спасибо всем за ответы. Остановился пока на конверторах.
Но возникло еще пару проблем
1) Возможно ли в xaml добавление ресурсных объектов в коллекции внутри xaml т.е. надо не просто SomeProperty = {StaticResource/DynamicResource SomeResourceKey}, а еще
и
<Foo1>
<Foo1.Foo2Collection>
<Foo2/>
<Foo2/>
...
как то сосляться на объектные ресурс
...
<Foo2/>
</Foo1.Foo2Collection>
</Foo1>
?
и вообще можно ли как нибудь в xaml производить изменение пропертей ресурсных объектов не при их инициализации.(или как нибудь параметризовать ресурсные объекты)
В идеале хочется вынести DataTrigger'с в ресурсы с передачей им например имен пропертей Value которых в них будет проверяться (сделать библиотеку триггеров)
А после этого делать стили с заполнением коллекции тригеров из библиотеки триггеров (и передачей им имен пропертей которые должны использоваться при сравнении с Value)
Всем спасибо за помощь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.