WPF通过条件以编程方式更改行背景色 - c#

我正在尝试使用LoadingRow以编程方式更改行颜色。它按我的需要工作。但是问题出在滚动条上。当我在datagrid中使用滚动条时,我的公式再次运行,并且我得到了愚蠢的有序行颜色。

这是我的代码。我试图用第17列的值更改颜色。

        private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        DataGridRow row = e.Row;
        DataRowView rView = row.Item as DataRowView;
        if (rView != null && rView.Row.ItemArray[17].ToString().Contains("1"))
        {
            renk++;  
        }
        if (renk % 2 == 0)
        {
            e.Row.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF0000"));
        }
        else
        {
            e.Row.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#ffffff"));
        }
    }

我的代码运行后,它正在工作。但是,当我向下滚动鼠标以查看随后的行时,它也在工作。然后,当我向上滚动鼠标以查看第一行时,我的代码无法正常工作。您可以在下面看到打开时间和滚动图片之间的时差。

WPF通过条件以编程方式更改行背景色 - c# WPF通过条件以编程方式更改行背景色 - c#

谢谢。

参考方案

如果在DataGrid上关闭了虚拟化,这应该可以工作:

<DataGrid
    EnableRowVirtualization="False"

它将DataGridRow对象重新用于不同的行。如果您有10,000行并且可见30行,那么创建10,000个DataGridRow控件对象是很愚蠢的。如果您有足够的物品,以上内容将使您的应用程序屈服。但是,您的物品数量可能很少,在这种情况下,上述混合效果就足够了。

但是无论如何您都不需要这样做。正确的方法是使行虚拟化保持启用状态,并使用WPF而不是与之抗衡,例如下面的XAML。

我不知道您的第17列叫什么,所以我创建了一个快速表,其中填充了嘶嘶声。我的第17列相当于一个名为State的列。如果您提供更多信息,我们可以使此匹配您的实际工作。

<DataGrid
    ItemsSource="{Binding FizzBuzzTable}"
    >
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding State}" Value="Fizz">
                    <Setter Property="Background" Value="LightYellow" />
                </DataTrigger>
                <DataTrigger Binding="{Binding State}" Value="Buzz">
                    <Setter Property="Background" Value="LightSkyBlue" />
                </DataTrigger>
                <DataTrigger Binding="{Binding State}" Value="FizzBuzz">
                    <Setter Property="Background" Value="GreenYellow" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

使用javascript在客户端的列表视图中选择所有复选框 - javascript

我有一个列表视图,在标题中有一个复选框。如果标题复选框已选中/未选中,我想选择行中的所有复选框。如何在客户端实现此目标?这是ListView设计代码。<asp:ListView ID="lvTypes" runat="server" GroupPlaceholderID="groupPlaceHolde…

如何在JavaScript中将多个h1元素替换为h1,h2,h3,h4,h5,h6? - javascript

@foreach (var item in Model) { <div class="panel-heading"> <h1> <a href="#">@item.Title</a> </h1> </div> } 结果; (每页发布数:6)<…

CodeIgniter更新查询被执行两次 - php

我正在使用CodeIgniter 2.2。每次访问页面时,我都必须用+1更新数据库。代码可以工作,但是每次都会增加+2。示例:如果是total views=2,则在单击页面后total views应该是3,但是数据库中的值是4。我确定我在控制器中仅调用一次模型add_one_to_view_image。控制者 function view(){ $view_i…