【问题标题】:WPF Datagrid with AlternatingRowBackground scrolls differently when scrolled up and down上下滚动时,带有 AlternatingRowBackground 的 WPF Datagrid 滚动方式不同
【发布时间】:2012-05-23 20:58:06
【问题描述】:

当我向上滚动时,我有一个带有 AlternatingRowBackground 的 WPF(Win7 上的 4.0)数据网格,当我向下滚动时,行颜色保持在原位,数据在移动,颜色随着数据移动。 平时吗?有没有可能摆脱这种奇怪的行为?

网格 XAML:

<DataGrid AutoGenerateColumns="True"
                      CanUserAddRows="False"
                      Grid.Row="0" Grid.Column="0"  Name="grdData" 
                      ItemsSource="{Binding Path=.}" SelectionMode="Single"
                      HeadersVisibility="All" 
                      AlternatingRowBackground="LightGray" 
                      />

注意:我还有其他关于滚动的问题 (WPF Datagrid scrolls up a bit when scrolled to end),但我不确定是否存在相关问题。

【问题讨论】:

    标签: wpf scroll row wpfdatagrid alternating


    【解决方案1】:

    EnableRowVirtualization="False" 添加到您的数据网格。

    【讨论】:

    • 你是对的。如果没有更好的解决方案,我会接受(我需要虚拟化来提高性能)。
    • 完全可以理解。我会回来看看是否有更好的建议。
    【解决方案2】:

    此触发器适用于 EnableRowVirtualization="True"

    <DataGrid Name="dg" Style="{DynamicResource estiloDG}" MinRowHeight="40" GridLinesVisibility="None" 
              HorizontalGridLinesBrush="LightGray" VerticalGridLinesBrush="LightGray"
              BorderBrush="Gray" BorderThickness="1" Foreground="#424242"
              VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
              ItemsSource="{Binding ElementName=Me, Path=ItemsSource, Mode=OneWay}" x:FieldModifier="Private" 
              EnableRowVirtualization="True"
              VirtualizingStackPanel.IsVirtualizing="True"
              VirtualizingStackPanel.VirtualizationMode="Recycling"
              CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="True" CanUserSortColumns="True">
    
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <Trigger Property="AlternationIndex" Value="0">
                        <Setter Property="Background" Value="White" />
                    </Trigger>
                    <Trigger Property="AlternationIndex" Value="1">
                        <Setter Property="Background" Value="#FFD0E8D0" />
                    </Trigger>                  
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    
    <DataGrid.Resources>  
        <Style x:Key="estiloDG" TargetType="{x:Type DataGrid}">
            <Setter Property="BorderBrush" Value="White"/>
            <Setter Property="Background" Value="White" />
            <Setter Property="MinHeight" Value="30" />
            <Setter Property="ColumnHeaderHeight" Value="30" />
            <Setter Property="HeadersVisibility" Value="All" />
            <Setter Property="RowBackground" Value="{StaticResource RowBackgroundBrush}" />
            <Setter Property="AlternationCount" Value="2" />
            <Setter Property="HorizontalGridLinesBrush" Value="{StaticResource DataGridHorizontalLinesBrush}" />
            <Setter Property="VerticalGridLinesBrush" Value="{StaticResource DataGridHorizontalLinesBrush}" />
            <Setter Property="CellStyle" Value="{StaticResource DataGridCellStyle}" />
            <Setter Property="RowValidationErrorTemplate" Value="{StaticResource ErrorTemplate2}" />
            <Setter Property="ColumnHeaderStyle" Value="{StaticResource DatagridColumnHeaderCustomTemplateStyle}" />      
        </Style>
    </DataGrid.Resources>
    

    【讨论】:

    • 很抱歉,我们有这段代码在目标 4.0 的生产环境中工作
    • 我再看看。
    • &lt;DataGrid.RowStyle&gt;&lt;/DataGrid.RowStyle&gt; 块添加到我的 DataGrid XAML 没有任何效果。除非我将“白色”更改为不同的颜色,否则我会得到一个包含所有那种颜色的网格。是否需要在此块之外进行其他设置?
    • 我的答案是用代码编辑的。抱歉耽搁了!
    • 根本不行,是不是你没发的风格?甚至没有设置 AlternationCount 属性。
    猜你喜欢
    • 2017-02-06
    • 2017-07-12
    • 1970-01-01
    • 2014-06-24
    • 2011-10-06
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多