自定义BackgroundConverter for LongListSelector

时间:2014-08-02 07:40:54

标签: c# xaml windows-phone-8 windows-phone ivalueconverter

我的应用程序中有一个特定的配色方案,我的LongListSelectors跳转列表样式与我的配色方案完全匹配,我为JumpList创建了样式,就像这样。

<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。但问题是我不知道从哪里开始或如何。我需要通过哪些参数。我知道如何使用转换器工作并自己编写了一些转换器。但在这里,我不知道。我搜索过,但没有找到任何示例代码,我可以将其用作自定义BackgroundConverter的基础。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

Hey KasunKV你考虑过隐藏空组吗?像这样,

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

如果你已经设置了禁用的颜色,那么看看这个;这里重复的代码太多了:

Change-the-background-of-a-border-with-converter

如果您正在为组使用GroupKeyList,那么您的IsPair将需要检查组的大小,并在大小为空(0)时返回一种颜色,而当大小为空时返回另一种颜色。

答案 1 :(得分:0)

使用此功能。

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实现。只需用适当的WP8方法替换GetColorFromHexa()方法来转换颜色。从转换器中分离方法,这样你就可以重新使用它。而已! :)