WP8 ListPicker расширенный режим фона

Когда тема устройства установлена ​​на темный, элемент управления ListPicker имеет следующее:

  • Нормальный режим - фон прозрачный.
  • Расширенный режим - фон белый.

Когда тема устройства установлена ​​на свет, элемент управления ListPicker имеет следующее:

  • Нормальный режим - фон прозрачный.
  • Расширенный режим - фон прозрачный.

Я использую изображение + текст в коллекции элементов списка выбора. Работает нормально, если тема установлена ​​на свет. Однако, когда тема установлена ​​на темное изображение отображается в обычном режиме, но не отображается в расширенном режиме. Есть идеи обойти это?

Смотрите изображения ниже

Светлая тема - нормальный режимСветлая тема - расширенный режимТемная тема - нормальный режимТемная тема - расширенный режим

1 ответ

Решение

У меня есть два предложения, которые являются быстрыми и не требуют серьезных изменений ListPicker контроль...

1) Используйте цвет акцента телефона в качестве OpacityMask с изображением...

<toolkit:ListPicker.ItemTemplate>
<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <Rectangle Fill="{StaticResource PhoneAccentBrush}" Height="40" Width="40">
            <Rectangle.OpacityMask>
                <ImageBrush ImageSource="{Binding Icon}" />
            </Rectangle.OpacityMask>
        </Rectangle>
        <TextBlock Text="{Binding Name}" />
    </StackPanel>
</DataTemplate>
</toolkit:ListPicker.ItemTemplate>

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

2) Измените цвет фона выделенного состояния ListPicker, чтобы он был белым при использовании темы "Свет" (по умолчанию) и черным при использовании темы "Темный" (отличается от значения по умолчанию). Я также изменил цвет переднего плана.

<ObjectAnimationUsingKeyFrames
    Storyboard.TargetName="UserControl"
    Storyboard.TargetProperty="Foreground"
    Duration="0">
<DiscreteObjectKeyFrame
    Value="{StaticResource PhoneForegroundBrush}"
    KeyTime="0"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
    Storyboard.TargetName="Border"
    Storyboard.TargetProperty="Background"
    Duration="0">
<DiscreteObjectKeyFrame
    Value="{StaticResource PhoneBackgroundColor}"
    KeyTime="0"/>
</ObjectAnimationUsingKeyFrames>

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

Другие вопросы по тегам