lang
1<DataGrid Name="dataGrid" Canvas.Left="43" Canvas.Top="36" Height="336" Width="480" IsReadOnly="True" 2 CanUserSortColumns="False" CanUserAddRows="False" SelectionUnit="Cell" SelectionMode="Single" 3 MouseLeftButtonUp="dataGrid_MouseLeftButtonUp" LoadingRow="dataGrid_LoadingRow" > 4 <DataGrid.ColumnHeaderStyle> 5 <Style TargetType="DataGridColumnHeader"> 6 <EventSetter Event="Click" Handler="columnHeader_Click" /> 7 </Style> 8 </DataGrid.ColumnHeaderStyle> 9 <DataGrid.RowHeaderStyle> 10 <Style TargetType="DataGridRowHeader"> 11 <EventSetter Event="Click" Handler="rowHeader_Click" /> 12 </Style> 13 </DataGrid.RowHeaderStyle> 14</DataGrid>
lang
1private void columnHeader_Click(object sender, RoutedEventArgs e) 2{ 3 var columnHeader = sender as System.Windows.Controls.Primitives.DataGridColumnHeader; 4 if (columnHeader == null) 5 { 6 return; 7 } 8 9 for (int j = 0; j < this.dataGrid.Columns.Count; j++) 10 { 11 if (j != columnHeader.DisplayIndex) 12 { 13 continue; 14 } 15 16 for (int i = 0; i < this.dataGrid.Items.Count; i++) 17 { 18 this.dataGrid.ScrollIntoView(this.dataGrid.Items[i]); 19 DataGridCellInfo cellInfo = new DataGridCellInfo(this.dataGrid.Items[i], this.dataGrid.Columns[j]); 20 21 // DataGridCellInfoから該当するDataGridCellを取得 22 DataGridCell cell = getCellFromCellInfo(this.dataGrid, cellInfo); 23 24 cell.Background = new SolidColorBrush(Colors.LemonChiffon); 25 } 26 } 27}
列ヘッダーをクリックすると、該当する列に含まれるすべてのセルの背景色を変える処理を実装しています。
上記の処理ではほとんどのセルは正しく色が変わるのですが、
DataGrid
を上下にスクロールすると、一部のセルの背景色が変更されていませんでした。
この状態で更にそのセルが見えなくなる位置までスクロールし、再度その辺りまで戻すと、
今度は別のセルの背景色が変更されていない状態になります(さっき変更されていなかったセルは変更されている)。
どこか特定の列だけで起こっているというわけではなく、何故か最初に選択した列(2度目でも起こる場合あり)でのみ発生し、たいてい3度目以降に選択した列では上記の現象は発生しませんでした。
原因と対処がわかる方、どうかご回答の程よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。