1

我正在开发 Windows8 商店应用程序。我有动态填充的网格

<Grid Grid.Column="1" Margin="0,16,0,0" HorizontalAlignment="Left" VerticalAlignment="Center">
                <GridView x:Name="chapterlist" HorizontalAlignment="Left" VerticalAlignment="Top" Width="auto" ItemClick="onChapterClick" Padding="0" Height="600" Margin="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                    <GridView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Width="260" Height="80" Background="{Binding RelativeSource={RelativeSource Self}, Path=alreadyDownload, Converter={StaticResource ColorConverter}}">                                    
                                <TextBlock x:Name ="AAA" Text="{Binding Path=Chapter}" FontSize="10" Foreground="White" d:LayoutOverrides="Width" Margin="5" TextWrapping="Wrap" />
                                <TextBlock Text="{Binding Path=Name}" Foreground="White" d:LayoutOverrides="Width" TextWrapping="Wrap"/>
                                <TextBlock Text="{Binding Path=alreadyDownload}" Foreground="#073363" VerticalAlignment="Bottom"  HorizontalAlignment="Right" Margin="0,18,2,2" FontSize="10" d:LayoutOverrides="Width" TextWrapping="Wrap"/>
                            </StackPanel>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>
            </Grid>

所以我必须根据 TextBlock 值改变 StackPanel 的背景颜色,比如

<TextBlock Text="{Binding Path=alreadyDownload}" Foreground="#073363" VerticalAlignment="Bottom"  HorizontalAlignment="Right" Margin="0,18,2,2" FontSize="10" d:LayoutOverrides="Width" TextWrapping="Wrap"/>

我使用过 ColorConverter 之类的

class ColorConverter : IValueConverter
{
    public object Convert(object value, System.Type targetType, object parameter, String culture)
    {
        if (value != null)
        {
            if (value.Equals("Already Downloaded "))
                return Colors.Red;
            else
                return Colors.White;
        }

        return Colors.White;
    }

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

但是我的网格没有反映背景颜色(实际上根本没有颜色,它是透明的)。为什么会这样?我怎么解决这个问题?请帮助。我附上图片以供参考。提前致谢 在此处输入图像描述

所以我想要的是显示带有文本已经下载的网格应该有一些其他颜色,其余的网格有不同的颜色。

4

3 回答 3

1

有两种方法可以完成上述场景

1)我们可以将 Background 属性添加到填充 ObservableCollection 并在 xaml 中使用绑定的对象

<Grid Width="200" Background="{Binding Background}" />

通过这种方式,我们可以选择网格中的每个项目颜色并动态更改它,只需更改对象属性即可。这里 Background 属性必须是一个分配有有效颜色的字符串,例如

object.Background = "White"

2)使用转换器(如我所用)将对象中的一些现有属性转换为颜色(请参阅我的转换器类)。我们也可以使用我在这里使用的一些属性进行绑定

<TextBlock Text="{Binding Path=alreadyDownload}"

看起来像

<StackPanel Width="260" Height="80" Background="{Binding RelativeSource={RelativeSource Self}, Path=alreadyDownload, Converter={StaticResource ColorConverter}}">                                    
                            <TextBlock x:Name ="AAA" Text="{Binding Path=Chapter}" FontSize="10" Foreground="White" d:LayoutOverrides="Width" Margin="5" TextWrapping="Wrap" />
                            <TextBlock Text="{Binding Path=Name}" Foreground="White" d:LayoutOverrides="Width" TextWrapping="Wrap"/>
                            <TextBlock Text="{Binding Path=alreadyDownload}" Foreground="#073363" VerticalAlignment="Bottom"  HorizontalAlignment="Right" Margin="0,18,2,2" FontSize="10" d:LayoutOverrides="Width" TextWrapping="Wrap"/>
                        </StackPanel>

那么为什么我的代码没有运行呢?这是因为 IValueConverter 返回的对象应该是一个字符串,所以不要使用

if (value.Equals("Already Downloaded "))
            return Colors.Red;
        else
            return Colors.White;

采用

 if (value.Equals("Already Downloaded "))
                return "#FF0000";
            else
                return "#FFFFFF";

所以它运行完美

于 2013-06-26T09:46:03.213 回答
0
if (value.Equals("Already Downloaded "))

可能是Downloaded和 "之间的空格吗?

于 2013-06-26T08:09:08.410 回答
0

请改用此代码:

if (value.Equals("Already Downloaded "))
        return Brushes.Red;
    else
        return Brushes.White;

或者如果你想使用颜色类,你可以用这种方式。

new SolidColorBrush(Colors.Red)

希望这可以解决您的问题。

于 2013-06-26T10:17:21.170 回答