Пользовательский 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), и другой цвет, если это не так.