Пользовательский BackgroundConverter для LongListSelector

У меня есть определенная цветовая схема в моем приложении, и я не хочу LongListSelectors Стиль списка переходов, чтобы точно соответствовать моей цветовой схеме, я создал стиль для Jump List и вот так.

<Style x:Name="LibraryJumpListStyle" TargetType="phone:LongListSelector">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border Background="#007fb3" Margin="6" toolkit:TiltEffect.IsTiltEnabled="True">
                    <TextBlock Text="{Binding Key}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" FontSize="48" Margin="12,0,0,0" Foreground="White" VerticalAlignment="Bottom"/>
                </Border>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="LayoutMode" Value="Grid"/>
    <Setter Property="GridCellSize" Value="111,111"/>
    <Setter Property="Margin" Value="12,6,0,0"/>
</Style>

Но это делает все мои элементы списка переходов, включая отключенные (разделы, где у меня нет элементов), одного цвета. Я хочу, чтобы отключенные элементы списка переходов были другого цвета. Я понимаю, для этого мне нужно сделать свой собственный BackgroundConverter. Но проблема в том, что я не знаю, с чего начать и как. Какие параметры мне нужно передать. Я знаю, как работают valuse Converters, и сам написал несколько конвертеров. Но здесь я понятия не имею. Я искал и не нашел ни одного примера кода, где я мог бы использовать в качестве основы для моего пользовательского BackgroundConverter. Может кто-нибудь, пожалуйста, помогите?

2 ответа

Использовать этот.

using Windows.UI;
using Windows.UI.Xaml.Media;

public class ColorResolver : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, string language)
    {
       return GetColorFromHexa((string) value)); 
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }

    private SolidColorBrush GetColorFromHexa(string hexaColor)
    {
        return new SolidColorBrush(
            Color.FromArgb(
                255,
                Convert.ToByte(hexaColor.Substring(1, 2), 16),
                Convert.ToByte(hexaColor.Substring(3, 2), 16),
                Convert.ToByte(hexaColor.Substring(5, 2), 16)
            )
        );
     }
}

Привязать цвет, который вы хотите применить к границе.

<Border Background="{Binding MyColorProperty, Converter={StaticResource MyColorConverter}}" Margin="6" toolkit:TiltEffect.IsTiltEnabled="True">
    <TextBlock Text="{Binding Key}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" FontSize="48" Margin="12,0,0,0" Foreground="White" VerticalAlignment="Bottom"/>
</Border>

Это реализация WinRT. Просто замените метод GetColorFromHexa() подходящим методом WP8 для преобразования цвета. Отделяйте метод от преобразователя, чтобы вы могли использовать его повторно. Это оно!:)

Эй, KasunKV, ты думаешь вместо этого спрятать пустые группы? Вот так,

<phone:LongListSelector x:Name="accounts_ls" IsGroupingEnabled="True" HideEmptyGroups="true"/>

Если вы мёртвые, установите на отключенный цвет, посмотрите на это; здесь слишком много кода для повторения:

Переключающий на-фон-о-а-граница-с преобразователем

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

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