Лучшая практика для определения местоположения стилей в Silverlight - PullRequest
11 голосов
/ 31 июля 2009

Где лучше всего разместить Style StaticResources? Я помещаю глобальные стили и стили по умолчанию в app.xaml, а стили, специфичные для страницы, в page_name.xaml. Должен ли каждый элемент управления иметь свой собственный стиль StaticResource? Допустимо ли помещать некоторые атрибуты стиля прямо в элемент управления? У меня есть страница с 5 текстовыми полями, должен ли быть стиль для каждого из них, если единственное отличие - это свойство Width или MaxLength? Или один стиль должен быть определен с общими свойствами для каждого TextBox, а определенные свойства стиля должны быть определены в элементе управления?

Ответы [ 4 ]

10 голосов
/ 05 августа 2009

Иерархия существует по причине, вероятно, хорошей идеей будет начать с простого и локально для элемента, с которым вы работаете , а затем переместить его по мере необходимости.

У ваших дизайнеров также могут быть особые требования, которые могут превзойти это. Например, команда, отправляющая много ревизий по некоторым стилям, может захотеть поместить всю работу над стилем в один файл XAML, пока не будет готова к большему.

Типичная иерархия стилей в обратном порядке

Первые несколько элементов - это ваши «наиболее выпеченные» и наиболее часто используемые стили, обычно вам нужно начинать с нижней части и продвигаться вверх. Приятно, что вам не нужно работать с несколькими файлами XAML и хранить их в хранилище.

Уровень приложения (App.xaml)

Стили уровня приложения будут полезны везде, где у вашего приложения есть интерфейс для общих элементов.

Если вы используете Silverlight 2, это ваш лучший нехакерный способ сделать ваши стили доступными во всем приложении.

Будьте осторожны при регулярном использовании ресурсов App.xaml, поскольку библиотека модульных тестов, которая находится за пределами вашего приложения, будет гораздо сложнее тестировать, поскольку в некоторых ситуациях она не подберет стили уровня приложения.

Объединенный словарь

Слитные словари ресурсов позволяют вам разделять ваши стили на дополнительные файлы XAML, упрощая их разбор по областям функций, функциям, типу элемента управления, имени группы и т. Д. Подробнее об этой функции .

Подумайте об использовании этого для стилей на уровне приложения в ситуациях, когда это имеет смысл, поскольку вы можете использовать их в отдельных проектах и ​​решениях.

Недоступно для Silverlight 2, эта функция была добавлена ​​в Silverlight 3.

Страница уровня

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

Не стесняйтесь начинать дальше вниз по визуальному дереву (например, уровню управления) и перемещать эти стили вверх, как это имеет смысл.

На панели

Хорошо содержать кучу похожих фрагментов, как при форматировании формы.

На пульте управления

Начните здесь. Когда вы стилизуете элемент управления в Blend, он обычно начинается здесь, если вы не выберете опцию ресурса приложения.

Это промежуточный шаг между установкой свойства и фактически фактическим ресурсом стиля, так как это будет просто установщик свойства Style элемента управления - но вы можете легко добавить x: Key и переместить его вверх в визуальное дерево, когда вы будете готовы.

Неявные стили и темы

Если ваша команда или компания использует обычный набор стилей для всех элементов управления определенного типа (кнопки, флажки, назовите его), рассмотрите возможность использования функции Implicit Style Manager (добавление значения для Silverlight) для создания неявных стилей , Это похоже на историю стилей WPF, где вам не нужно устанавливать стиль во всех местах, где вы его используете.

Я нашел хороший онлайн-учебник с быстрым поиском для вас, чтобы узнать больше о ISM .

Когда использовать свойства вместо общих, общих стилей

W.R.T. Ваш вопрос: если у вас есть набор текстовых полей, в которых различия составляют MaxLength, Width и т. д., вам, вероятно, следует явно указать их как свойства для каждого экземпляра элемента управления - если они различны.

Если у вас есть несколько (скажем, 3) элементов, использующих одинаковые значения, возможно, имеет смысл вытащить его, а затем начать использовать атрибут Style = "{StaticResource keyName }". Если вы набираете XAML вручную, это намного раздражает, чем ввод Width = "20".

3 голосов
/ 31 июля 2009

Прошу прощения за подключение моих собственных вещей (или если это не разрешено / не одобрено в SO), но я быстро разбирался в блогах о моем опыте реорганизации ресурсов в крупномасштабном проекте Silverlight 2 (т.е. без MergedDictionaries) Некоторое время назад. Пост здесь .

0 голосов
/ 04 августа 2009

Я бы согласился с вашим последним предложением: поместите общую часть всех текстовых полей в словарь стилей, который затем может быть загружен приложением / страницей / элементом управления, в зависимости от того, какой уровень разделяет эту общую часть. Необычную часть следует ИМХО устанавливать непосредственно в экземплярах текстового поля, для другого стиля нет смысла, если вы не используете этот специальный параметр в нескольких текстовых полях.

Я лично собираю все "общие" стили (для текстового поля, комбинированного списка и т. Д.) В одном файле resource.xaml. Я разделяю стили в дополнительных словарях xaml-resource, только если я хочу исключить их для какой-либо цели. Например, я поместил стили для компонентов сторонних производителей в отдельные файлы ресурсов, s.th. Я могу загрузить свой общий файл ресурсов "автономно" в приложениях, которые не ссылаются на эту стороннюю библиотеку. Точно так же я отделяю стили, специфичные для проекта (цвета, подходящие для корпоративной идентичности клиентов), от глобальных стилей (стили продуктов, не зависящих от клиента), очень похожие на рекомендации, которые должны соблюдаться для наследования классов. Мое приложение затем загружает все ресурсы, s.t. пользовательские элементы управления не должны знать о них.

0 голосов
/ 31 июля 2009

Проект Silverlight, над которым я работаю, использовал шаблон бизнес-приложения RIA от MS. Все их стили были в папке «assets», и файл назывался Styles.xaml. Я придерживаюсь их организации и мне это нравится, хотя я также добавил отдельные папки для «диалогов» и пользовательских «элементов управления».

Вы можете скачать их образец здесь, который может ответить на ваши вопросы: http://blogs.msdn.com/brada/archive/2009/07/10/amazing-business-apps-example-updated-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx

...