作成日: 2016/02/01 最終更新日: 2016/05/18
文書種別
不具合
状況
修正済み
詳細
スクロールバーのコンテキストメニューの「ここにスクロール」「最上部」「最下部」を選択すると、スクロール位置は変更されるが、C1DataGridの表示内容は変更されません。
回避方法
この問題はバージョン4.0.20161.507で修正されました。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
C1DataGridのLoadedイベントにて、コンテキストメニューの「ここにスクロール」「最上部」「最下部」選択時の処理を実装します。
◎サンプルコード(Visual Basic)
◎サンプルコード(C#)
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
C1DataGridのLoadedイベントにて、コンテキストメニューの「ここにスクロール」「最上部」「最下部」選択時の処理を実装します。
◎サンプルコード(Visual Basic)
Private Sub c1DataGrid_Loaded(sender As Object, e As RoutedEventArgs)
Dim border = VisualTreeHelper.GetChild(C1DataGrid1, 0)
Dim grid = VisualTreeHelper.GetChild(border, 0)
Dim grid2 = VisualTreeHelper.GetChild(grid, 0)
Dim border2 = VisualTreeHelper.GetChild(grid2, 5)
Dim vscrollbar = CType(VisualTreeHelper.GetChild(border2, 0), System.Windows.Controls.Primitives.ScrollBar)
AddHandler vscrollbar.Scroll,
Sub(s, ev)
Select Case ev.ScrollEventType
Case ScrollEventType.First
C1DataGrid1.ScrollIntoView(0, C1DataGrid1.CurrentColumn.Index)
Case ScrollEventType.Last
C1DataGrid1.ScrollIntoView(C1DataGrid1.Rows.Count - 1, C1DataGrid1.CurrentColumn.Index)
Case ScrollEventType.ThumbPosition
Dim vOffset As Double = 0.0
For index As Integer = 0 To C1DataGrid1.Rows.Count - 1
Dim height As C1.WPF.DataGrid.DataGridLength = C1DataGrid1.Rows(index).Height
If height.IsAuto Then
vOffset = vOffset + C1DataGrid1.RowHeight.Value
Else
vOffset = height.Value
End If
vOffset = vOffset - 2
If ev.NewValue < vOffset Then
C1DataGrid1.ScrollIntoView(index, C1DataGrid1.CurrentColumn.Index)
Exit For
End If
Next
End Select
End Sub
End Sub
Dim border = VisualTreeHelper.GetChild(C1DataGrid1, 0)
Dim grid = VisualTreeHelper.GetChild(border, 0)
Dim grid2 = VisualTreeHelper.GetChild(grid, 0)
Dim border2 = VisualTreeHelper.GetChild(grid2, 5)
Dim vscrollbar = CType(VisualTreeHelper.GetChild(border2, 0), System.Windows.Controls.Primitives.ScrollBar)
AddHandler vscrollbar.Scroll,
Sub(s, ev)
Select Case ev.ScrollEventType
Case ScrollEventType.First
C1DataGrid1.ScrollIntoView(0, C1DataGrid1.CurrentColumn.Index)
Case ScrollEventType.Last
C1DataGrid1.ScrollIntoView(C1DataGrid1.Rows.Count - 1, C1DataGrid1.CurrentColumn.Index)
Case ScrollEventType.ThumbPosition
Dim vOffset As Double = 0.0
For index As Integer = 0 To C1DataGrid1.Rows.Count - 1
Dim height As C1.WPF.DataGrid.DataGridLength = C1DataGrid1.Rows(index).Height
If height.IsAuto Then
vOffset = vOffset + C1DataGrid1.RowHeight.Value
Else
vOffset = height.Value
End If
vOffset = vOffset - 2
If ev.NewValue < vOffset Then
C1DataGrid1.ScrollIntoView(index, C1DataGrid1.CurrentColumn.Index)
Exit For
End If
Next
End Select
End Sub
End Sub
◎サンプルコード(C#)
private void c1DataGrid_Loaded(object sender, RoutedEventArgs e)
{
var border = VisualTreeHelper.GetChild(c1DataGrid, 0);
var grid = VisualTreeHelper.GetChild(border, 0);
var grid2 = VisualTreeHelper.GetChild(grid, 0);
var border2 = VisualTreeHelper.GetChild(grid2, 5);
var vscrollbar = VisualTreeHelper.GetChild(border2, 0) as System.Windows.Controls.Primitives.ScrollBar;
vscrollbar.Scroll += (s, ev) => {
switch(ev.ScrollEventType)
{
case ScrollEventType.First:
c1DataGrid.ScrollIntoView(0, c1DataGrid.CurrentColumn.Index);
break;
case ScrollEventType.Last:
c1DataGrid.ScrollIntoView(c1DataGrid.Rows.Count - 1, c1DataGrid.CurrentColumn.Index);
break;
case ScrollEventType.ThumbPosition:
double vOffset = 0.0;
for (int index = 0; index < c1DataGrid.Rows.Count; index++ )
{
C1.WPF.DataGrid.DataGridLength height = c1DataGrid.Rows[index].Height;
if (height.IsAuto)
vOffset += c1DataGrid.RowHeight.Value;
else
vOffset = height.Value;
vOffset -= 2;
if (ev.NewValue < vOffset)
{
c1DataGrid.ScrollIntoView(index, c1DataGrid.CurrentColumn.Index);
break;
}
}
break;
}
};
}
{
var border = VisualTreeHelper.GetChild(c1DataGrid, 0);
var grid = VisualTreeHelper.GetChild(border, 0);
var grid2 = VisualTreeHelper.GetChild(grid, 0);
var border2 = VisualTreeHelper.GetChild(grid2, 5);
var vscrollbar = VisualTreeHelper.GetChild(border2, 0) as System.Windows.Controls.Primitives.ScrollBar;
vscrollbar.Scroll += (s, ev) => {
switch(ev.ScrollEventType)
{
case ScrollEventType.First:
c1DataGrid.ScrollIntoView(0, c1DataGrid.CurrentColumn.Index);
break;
case ScrollEventType.Last:
c1DataGrid.ScrollIntoView(c1DataGrid.Rows.Count - 1, c1DataGrid.CurrentColumn.Index);
break;
case ScrollEventType.ThumbPosition:
double vOffset = 0.0;
for (int index = 0; index < c1DataGrid.Rows.Count; index++ )
{
C1.WPF.DataGrid.DataGridLength height = c1DataGrid.Rows[index].Height;
if (height.IsAuto)
vOffset += c1DataGrid.RowHeight.Value;
else
vOffset = height.Value;
vOffset -= 2;
if (ev.NewValue < vOffset)
{
c1DataGrid.ScrollIntoView(index, c1DataGrid.CurrentColumn.Index);
break;
}
}
break;
}
};
}
旧文書番号
81549