Подтвердить что ты не робот

Автоматическая поддержка темных/светлых значков в Windows Phone 8

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

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

Почему нет поддержки обычных изображений? Например: я хочу отобразить значок телефона. Я выбрал один из встроенных значков и скопировал его из папки Microsoft SDK в папку "Image" моего проекта. Если пользователь использует темную тему, все будет хорошо, потому что белый значок телефона будет виден на черном фоне. Но если он переключится на светлую тему, значок будет невидим, потому что он белый на белом.

Я полностью понимаю ресурсы стиля для текстовых полей или цветов фона, которые используют телефонный акцент или цвет темы. Но почему это, что нет поддержки простых значков, которые я добавил как изображение на мою страницу XAML?

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

Есть ли какое-нибудь решение, которое будет работать только с XAML? Или, по крайней мере, легко поддерживать? И почему я не могу использовать встроенные изображения из SDK с самого начала? Они уже доступны в темных и легких версиях и уже используются в панели приложений.

4b9b3361

Ответ 1

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

<Rectangle Fill="{StaticResource PhoneForegroundBrush}" Width="48" Height="48" >
    <Rectangle.OpacityMask>
        <ImageBrush ImageSource="/Images/my.icon.png" />
    </Rectangle.OpacityMask>
</Rectangle>

Где my.icon.png - это белое изображение, подобное тем, которое вы можете выбрать для панели действий.

Ответ 2

Вы можете использовать векторную графику вместо значков растровых изображений и использовать кисть, ориентированную на темы, чтобы нарисовать их.

Если вы хотите, чтобы приложение отвечало на переключатель темы, вам нужно ответить на него любым способом.

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

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

Edit

Посмотрите на это: Пользовательские ресурсы темных/темных тем на Windows Phone 7

Ответ 3

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

Изменить: Вот еще одна хорошая статья по этой теме. Новые разрешения экрана

Ответ 4

Вы выбираете значок White Foregrounded. Он подходит для тем и темных тем. То, что я делал.

Ответ 5

Инструмент Coding 4 Fun включает в себя круглую кнопку, которая имитирует кнопки панели приложений, включая обновление цвета переднего плана в зависимости от темы. Код является открытым исходным кодом, поэтому, возможно, вы найдете ответ. Или, в качестве взлома, вы можете использовать элемент управления RoundButton, отключить границу и не предоставлять событие Click.