【问题标题】:UWP C# - listview change "item" background color depending of value (not the entire row)UWP C# - 列表视图根据值更改“项目”背景颜色(不是整行)
【发布时间】:2017-01-05 17:56:14
【问题描述】:

以下代码在将行加载到列表视图时运行仅发生一次。 我的 ListView 项目只有 2 个值 - “x”和“n”。我希望值为“x”的项目(“单元格”)作为背景颜色红色。 以下代码对我有 2 个问题: 1)我不想指定所有列/项目(goodFH,Position等)如果值=“x”,则“单元格”为红色(希望作为伪代码“如果当前单元格值=“x”则红色“) 2) args.ItemContainer.Background 更改整个行背景,而不是我希望的“单元格”!

private void listViewContentChange(ListViewBase sender, ContainerContentChangingEventArgs args)
    {

        if (((Binding.Car)args.Item).GoodFH == "x")
        {
            args.ItemContainer.Background = (SolidColorBrush)Application.Current.Resources["Red"];
        }
        else
        {
            if (((Binding.Car)args.Item).Position == "x")
            {
                args.ItemContainer.Background =(SolidColorBrush)Application.Current.Resources["red"];

            }
        }
    }


<DataTemplate x:DataType="data:Car">
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <StackPanel Orientation="Horizontal" Margin="20,20,0,0">
                        <TextBlock FontSize="18" Text="{x:Bind GoodFH}" HorizontalAlignment="Right" Height="20" Width="158"></TextBlock>
                        <TextBlock FontSize="18" Text="{x:Bind Position }" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>
                        <TextBlock FontSize="18" Text="{x:Bind PathFHfs}" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>
                        <TextBlock FontSize="18" Text="{x:Bind PathBHFlSp }" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>

有什么帮助吗?希望这个问题可以理解!

【问题讨论】:

    标签: c# listview uwp


    【解决方案1】:

    据我所知,我们无法通过设置ItemContainer.Background 来更改cell 的背景。

    我们应该可以在Grid中设置TextBlock,这样我们就可以改变Grid的背景了。

    我们也可以使用bind来设置Grid的Background。要将“GoodFH”绑定到Background,我们应该可以使用IValueConverter

    例如:

    MyValueConverters.cs 代码:

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value.ToString() == "x")
        {
            return new SolidColorBrush(Colors.Red);
        }
        return new SolidColorBrush(Colors.Transparent);
    }
    
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value;
    }
    

    XAML 代码:

    <Page.Resources>
        <local:MyValueConverters x:Key="MyConverter" />
    </Page.Resources>
    
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView  Name="MyListView" ItemsSource="{x:Bind Cars}" ContainerContentChanging="listViewContentChange">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="local:Car">
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <StackPanel Orientation="Horizontal" Margin="20,20,0,0">
                            <Grid Background="{x:Bind GoodFH,Converter={StaticResource MyConverter}}">
                                <TextBlock  FontSize="18" Text="{x:Bind GoodFH}" HorizontalAlignment="Right" Height="20" Width="158"></TextBlock>
                            </Grid>
                            <Grid Background="{x:Bind Position,Converter={StaticResource MyConverter}}">
                                <TextBlock FontSize="18" Text="{x:Bind Position }" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>
                            </Grid>
                            <TextBlock FontSize="18" Text="{x:Bind PathFHfs}" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>
                            <TextBlock FontSize="18" Text="{x:Bind PathBHFlSp }" HorizontalAlignment="Right" Height="20" Width="78"></TextBlock>
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
    

    【讨论】:

    • 感谢杰登。您的解决方案非常适合我!
    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2015-10-13
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多