我使用数据网格来显示数据作为一个表和虚拟化数据网格。当项目的总数至少超过40项时,它运行良好。因此,当超过40项并向下滚动时,单元格的边框显示不正确。我使用的是Dotnet core 3.1。
拜托,我已经做了4天了,还是什么都没有。非常感谢!
下面是我的代码:
<DataGrid Grid.Row="1"
AlternatingRowBackground="White"
HorizontalGridLinesBrush="#d4d4d4"
VerticalGridLinesBrush="#d4d4d4"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
HeadersVisibility="Column"
ItemsSource="{Binding Datas}"
SelectionMode="Single"
SelectionUnit="FullRow"
ScrollViewer.CanContentScroll="True"
EnableRowVirtualization="True"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.ScrollUnit="Pixel"
RowDetailsVisibilityMode="Visible"
HorizontalScrollBarVisibility="Disabled">
以下是列标记:
<DataGridTextColumn Width="*"
Header="Name"
Binding="{Binding PropertyName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnValidationError=True}"
EditingElementStyle="{StaticResource CellGotFocus}"
ElementStyle="{StaticResource CellLostFocus}"/>
<DataGridTemplateColumn Width="*"
Header="Code">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source, Source={vm:ReplaceModeSourceProvider}}"
SelectedValue="{Binding ReplaceMode,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
DisplayMemberPath="Name"
SelectedValuePath="Value"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这里是样式和模板:
<Style x:Key="CellLostFocus" TargetType="{x:Type TextBlock}">
<Setter Property="Padding" Value="0,4,0,4"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="LightPink"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Validation.HasError" Value="True"/>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)/ErrorContent}"/>
<Setter Property="ToolTip.StaysOpen" Value="True"/>
</MultiTrigger>
</Style.Triggers>
</Style>
<Style x:Key="CellGotFocus" TargetType="{x:Type TextBox}">
<Setter Property="Padding" Value="0,4,0,4"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="LightPink"/>
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)/ErrorContent}"/>
<Setter Property="ToolTip.StaysOpen" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
我试着跟随:https://www.codeproject.com/Articles/34405/WPF-Data-Virtualization和https://learn.microsoft.com/en-us/windows/uwp/debug-test-perf/listview-and-gridview-data-optimization
1条答案
按热度按时间nimxete21#
我已经修复了,这个问题是由系统.组件模型.注解引起的
我使用了DataGridTemplateColumn而不是DataGridTextColumn,并通过将ValidationErrorTemplate设置为null来删除默认验证模板。之后,我创建了一个自定义模板,并在发生错误时使用触发器来处理UI。
谢谢你的支持,希望对你有所帮助