3

何千もの行を持つ WPF DataGrid を使用するアプリケーションがあります。Vertical ScrollBar を使用したスクロールでパフォーマンスの問題が発生していたので、調査を行ったところScrollViewer.IsDeferredScrollingEnabled = "True"、DataGrid で設定することにより、スクロールが完了するまで行の読み込みを延期できることがわかりました。DataGridComboBoxColumn一部のユーザーが、DataGrid 内のオプションのリストをスクロールするDataGridと、ComboBox. これは、ComboBox スクロールバーでマウスをドラッグした場合にのみ発生し、マウス ホイールでスクロールした場合には発生しません。

.net 4.0 を使用して vb のサンプル クラスをまとめました。これは、列の ComboBox がマウス ドラッグを使用してスクロールされたときの問題を示しています。

XAML

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="279" Width="496">
<Grid>
    <DataGrid AutoGenerateColumns="False" Height="209" HorizontalAlignment="Left" Margin="12,12,0,0" Name="DataGrid1" VerticalAlignment="Top" Width="448" ItemsSource="{Binding}" ScrollViewer.IsDeferredScrollingEnabled="True">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name" />
            <DataGridComboBoxColumn Header="Drag Scroll through Items in a cell below" x:Name="IssueComboBoxColumn" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

コード

Class MainWindow 

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    Dim sourceList As New List(Of itemExample)
    For i As Integer = 0 To 50
        sourceList.Add(New itemExample("Item" & i.ToString, 4))
    Next

    Dim comboList As New List(Of String)
    For i As Integer = 0 To 50
        comboList.Add("Drop Item " & i.ToString)
    Next

    DataGrid1.DataContext = sourceList
    IssueComboBoxColumn.ItemsSource = comboList
    IssueComboBoxColumn.SelectedValuePath = "ComboItem"
End Sub

Private Class itemExample
    Property Name As String
    Property ComboItem As Integer


    Public Sub New(name As String, comboItem As Integer)
        Me.Name = name
        Me.ComboItem = comboItem
    End Sub
End Class
End Class
4

0 に答える 0