Всем добрый вечер,
Возникла задачка нормального решения которой пока не вижу.
Хочется добиться настраиваемости ячеек грида (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 — вынести темплейты в отдельный файл и потом конфигурить, но тоже блин там байндинги надо указывать (воощем тоже шило какое то)
_>Другой наверное вариант с TemplateSelector — вынести темплейты в отдельный файл и потом конфигурить, но тоже блин там байндинги надо указывать
По моему, TemplateSelector или StyleSelector — самое то. Может StyleSelector попроще будет, если нужно только какие-то простые свойства менять.
Здравствуйте, a_yenzh, Вы писали:
_>Буду рад любой информации. _>Заранее благодарен
Я так и не понял, проблема то в чем? Задать хитрые условия в Conditions? Ну, пожалуй, различные виды сравнений не так то просто реализовать в общем случае. Наверное только через Emit, но тут я слабоват... Зато равенство легко реализовать через Equals... Поэтому скорее всего остается вариант с конвертером.
Здравствуйте, 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,будет более похоже на то, что вам нужно, а именно: код конвертера не меняется, меняются только его параметры. Допустим, первый параметр — максимальное значение, второй — минимальное — третий — возвращаемый цвет.
Спасибо всем за ответы. Остановился пока на конверторах.
Но возникло еще пару проблем
1) Возможно ли в xaml добавление ресурсных объектов в коллекции внутри xaml т.е. надо не просто SomeProperty = {StaticResource/DynamicResource SomeResourceKey}, а еще
и
<Foo1>
<Foo1.Foo2Collection>
<Foo2/>
<Foo2/>
...
как то сосляться на объектные ресурс
...
<Foo2/>
</Foo1.Foo2Collection>
</Foo1>
?
и вообще можно ли как нибудь в xaml производить изменение пропертей ресурсных объектов не при их инициализации.(или как нибудь параметризовать ресурсные объекты)
В идеале хочется вынести DataTrigger'с в ресурсы с передачей им например имен пропертей Value которых в них будет проверяться (сделать библиотеку триггеров)
А после этого делать стили с заполнением коллекции тригеров из библиотеки триггеров (и передачей им имен пропертей которые должны использоваться при сравнении с Value)
Всем спасибо за помощь