【问题标题】:How can I change the Background color of a GridViewColumn dynamically?如何动态更改 GridViewColumn 的背景颜色?
【发布时间】:2015-09-05 22:49:45
【问题描述】:

总的来说,我有以下几点:

   List<Person> items = new List<Person>();
   Person p = new Person() { NameP = "Samantha", Gen = true, Feb = true, Mar = false, Apr = false, Mag = false, Lug = false, Ago = false, Set = false, Ott = false, Nov = false, Dic = false };
   items.Add(new Person() { NameP = "Jack", Gen = true, Feb = true, Mar = true, Apr = true, Mag = false, Lug = false, Ago = false, Set = false, Ott = false, Nov = false, Dic = false });
   listView.ItemsSource = items;

其中 Person 是一个由字符串 NameP 和 12 个布尔值组成的类,一个代表月份。

我设法在 ListView 内部的 GridView 中看到它们。结果如下:

现在,我必须将所有“真实”项目的背景更改为黄色,我不知道。这是 xaml 代码:

<ListView x:Name="listView" Height="144">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width ="150" Header="NAMEP" DisplayMemberBinding="{Binding NameP}"/>
                    <GridViewColumn Width ="50" Header="GEN" DisplayMemberBinding="{Binding Gen}"/>
                    <GridViewColumn Width ="50" Header="FEB" DisplayMemberBinding="{Binding Feb}"/>
                    <GridViewColumn Width ="50" Header="MAR" DisplayMemberBinding="{Binding Mar}"/>
                    <GridViewColumn Width ="50" Header="APR" DisplayMemberBinding="{Binding Apr}"/>
                    <GridViewColumn Width ="50" Header="MAG" DisplayMemberBinding="{Binding Mag}"/>
                    <GridViewColumn Width ="50" Header="GIU" DisplayMemberBinding="{Binding Giu}"/>
                    <GridViewColumn Width ="50" Header="LUG" DisplayMemberBinding="{Binding Lug}"/>
                    <GridViewColumn Width ="50" Header="AGO" DisplayMemberBinding="{Binding Ago}"/>
                    <GridViewColumn Width ="50" Header="SET" DisplayMemberBinding="{Binding Set}"/>
                    <GridViewColumn Width ="50" Header="OTT" DisplayMemberBinding="{Binding Ott}"/>
                    <GridViewColumn Width ="50" Header="NOV" DisplayMemberBinding="{Binding Nov}"/>
                    <GridViewColumn Width ="50" Header="DIC" DisplayMemberBinding="{Binding Dic}"/> 
                </GridView> 
            </ListView.View>
        </ListView>

感谢您的建议。

可能重复......

【问题讨论】:

标签: c# .net wpf visual-studio


【解决方案1】:

您可以使用转换器将布尔值转换为右背景

<GridViewColumn Width ="50" Header="GEN" >
    <GridViewColumn.CellTemplate>
         <DataTemplate>
              <TextBlock Text="{Binding Path=Gen}" Background="{Binding Gen, Converter={StaticResource BackgroundConverter}}" />
         </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

转换器看起来像这样

 class BackgroundConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null && value is bool && (bool)value)
        {
            return Application.Current.FindResource("ActiveBrush");
        }

        return Application.Current.FindResource("DefaultBrush");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

App.Resources 中的画笔

<SolidColorBrush x:Key="DefaultBrush" Color="Red" />
<SolidColorBrush x:Key="ActiveBrush" Color="Yellow" />

【讨论】:

    【解决方案2】:

    您可以为列表视图编写样式

    编写一个突出显示 ListViewItems 的样式

                    <Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="True">
                                <Setter Property="Background" Value="Yellow" />
                            </DataTrigger>
                        </Style.Triggers>
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}"/>
                    </Style>
                </ListView.Resources>
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}" Width="50"/>
                        <GridViewColumn Header="Date" DisplayMemberBinding="{Binding ItemID}" Width="auto" />
                        <GridViewColumn Header="ShipCity" DisplayMemberBinding="{Binding ItemSerialNumber}" Width="auto"/>
                    </GridView>
                </ListView.View>
            </ListView>
    

    Highlighting-Items-in-a-WPF-ListView

    【讨论】:

    • 它不起作用...我阅读了您的链接,但它崩溃了!我在 ListView 中写了“Binding Gen”和 Value="Red" 和 ItemContainerStyle="{StaticResource ItemContStyle}" ...
    • @JoeMatt 我更新了代码,它使用黑客检查字符串,您可以根据需要编写转换器。它有一个小问题,它为所有列设置颜色:(
    猜你喜欢
    • 2014-04-05
    • 2013-07-11
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2014-12-26
    相关资源
    最近更新 更多