Нужен совет как поменять цвета - PullRequest
0 голосов
/ 22 марта 2012

Я создаю приложение WPF, которое будет работать на ноутбуках, установленных в полицейских машинах.Приложение должно иметь «Ночной режим», который будет использовать более темные цвета, чтобы меньше напрягать глаза ночью.

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

Я создал перечисление под названием TimesOfDay,В перечислении есть два значения: DayTime и NightTime.Каждый элемент управления имеет свойство DepenencyProperty с именем TimeOfDay типа перечисления TimesOfDay.На главном экране есть кнопка, которую вы нажимаете, чтобы изменить значение свойства TimeOfDay.Когда вы нажимаете кнопку, он циклически изменяет значение свойства TimeOfDay между двумя значениями.

Я все еще довольно новичок в WPF, поэтому я не уверен, как это сделать, на стороне Xaml,Я думаю, что мне нужно создать два именованных стиля, например, один с именем DayStyle, а другой с NightStyle.Затем мне нужно добавить триггеры куда-нибудь, чтобы изменить стиль, применяемый к элементам управления при изменении свойства TimeOfDay.Это правда?

Я просто меняю цвет фона и переднего плана элементов управления по типу?Могу ли я сделать это по имени элемента?

Я очень размышляю над всем этим.Любая помощь будет оценена.

Тони

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Каждый элемент управления имеет свойство DepenencyProperty с именем TimeOfDay типа перечисления TimesDay.

Не делайте этого, просто создайте две полные темы в отдельной ResourceDictionaries, которую затем вы можете переключить через MergedDictionaries в Application.Resources. Нет необходимости помещать дневную информацию на элементы управления.

0 голосов
/ 22 марта 2012

Я бы не стал дублировать стиль, потому что ненавижу дублированный код ... Этого можно легко добиться с помощью триггера в ControlTemplate:

<Trigger Property="TimeOfDay" Value="NightTime">
    <Setter TargetName="someControl" Property="Background" Value="Black" />
    <Setter TargetName="someOtherControl" Property="ForeGround" Value="Yellow" />
    ...
</Trigger>

Другой вариант - использовать описанную мной технику здесь . Таким образом, вам даже не нужно помещать информацию TimeOfDay на сам элемент управления, это может быть свойство окружения.

0 голосов
/ 22 марта 2012

Следуйте этому руководству: http://weblogs.asp.net/psheriff/archive/2009/12/01/load-resource-dictionaries-at-runtime-in-wpf.aspx

  1. Создайте различные файлы ресурсов xaml, но убедитесь, что файл не компилируется и вместо этого копируется в каталог bin.
  2. Украсьте свои элементы управления xaml DynamicResource s.
  3. Загрузка ресурсов через код.

По сути, вы ищете "скин" для вашего приложения. Код, загружаемый в файл ресурсов, может использовать перечисление TimeOfDay.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...