我正在尝试使用DataGrid的ScrollIntoView,并以另一种颜色突出显示特定的行和列。 ScrollIntoView可以跳到正确的位置。重点不是。以下是我用来跳到这个位置的信息:
public void ShowSelection(int row, int column)
{
dtGridReads.SelectedItem = dtGridReads.Items[row];
dtGridReads.SelectedItem = dtGridReads.Columns[column];
dtGridReads.UpdateLayout();
dtGridReads.ScrollIntoView(dtGridReads.Items[row], dtGridReads.Columns[column]);
}
这是我的WPF数据网格:
<DataGrid x:Name="dtGridReads" AutoGenerateColumns="False"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode ="Standard"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
ItemsSource ="{Binding}" Block.TextAlignment="Center"
CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
GridLinesVisibility="None" Style="{StaticResource DataGridStyle_Blue}" ScrollViewer.ScrollChanged="dtGridReads_ScrollChanged">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Background" Value="Red" />
</DataTrigger >
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
感谢。
答案 0 :(得分:2)
您的ItemsSource对此有何看法?
您的触发器正在尝试绑定到每个DataGridRow的基础对象的IsSelected属性,因此如果该对象没有该属性,那么您将不会获得任何结果。在DataGrid上设置SelectedItem不会影响您的触发器,如上所述。
编辑: 我把一个快速的样本放在一起进行测试。正如预期的那样,你试图绑定到错误的东西(如果目标是突出显示红色的特定单元格,那么看起来你也有错误的目标。)
如果用这个替换整个DataGrid.RowStyle块,它将按预期工作:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
答案 1 :(得分:0)
这也可以使用DataGrid拥有的属性,例如DataGridRow.IsSelected
或DataGridCell.IsSelected
<Style TargetType="{x:Type DataGridRow}" x:Key="RowCustomStyle">
<Style.Triggers>
<Trigger Property="DataGridRow.IsSelected" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type DataGridRow}" x:Key="RowCustomStyle">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
现在,您必须告诉数据网格有关样式和所选项目的信息
<DataGrid ItemsSource="{Binding Path=ItemsSource, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" SelectionMode="Single"
RowStyle="{StaticResource RowCustomStyle}" SelectedItem="{Binding Path=SelectedItem}">
现在,您应该在ModelView中具有一个名为SelectedItem
的属性,其中包含要选择的数据网格中的对象。