ClipboardCopyingItem イベントは、 CopyType プロパティ (SelectedCells または SelectedRows) の値に関係なく、クリップボードにコピーされる前に、すべての選択された xamGrid セルに対して起動されます。このイベントはキャンセルできます。これは xamGrid ヘッダー セルに対しても起動されます。
以下のコードは、ClipboardCopyingItem イベントを使用してコピーされるセルをスタイルする方法を示します。コピー前にセル コンテンツを検証したり、固有のセルのイベントをキャンセルすることもできます。
1.最初に、ページで xamGrid コントロールを追加し、複数のセルに対してコピー操作を有効にして、Resources コレクションでカスタム セル スタイルを作成します。
<Page.Resources>
<data:DataUtil x:Key="DataUtil" />
<!-- カスタム スタイルをコピーされるセルに追加します-->
<Style x:Name="grayCellStyle" TargetType="ig:CellControl" >
<Setter Property="Foreground" Value="LightGray" />
</Style>
</Page.Resources>
...
<ig:XamGrid x:Name="xamGrid" ColumnWidth="Auto"
AutoGenerateColumns="False" Width="600" Height="400"
ItemsSource="{Binding Source={StaticResource DataUtil}, Path=Products}"
ClipboardCopyingItem="xamGrid_ClipboardCopyingItem"
ClipboardCopying="xamGrid_ClipboardCopying">
<ig:XamGrid.Columns>
<ig:TextColumn Key="ProductID" />
<ig:TextColumn Key="ProductName" />
<ig:TextColumn Key="UnitPrice" FormatString="{}{0:C}" />
<ig:TextColumn Key="UnitsOnOrder" />
</ig:XamGrid.Columns>
<ig:XamGrid.SelectionSettings>
<ig:SelectionSettings CellSelection="Multiple" />
</ig:XamGrid.SelectionSettings>
<ig:XamGrid.ClipboardSettings>
<ig:ClipboardSettings AllowCopy="True" />
</ig:XamGrid.ClipboardSettings>
</ig:XamGrid>
2.コード ビハインドで次の using/Import のディレクティブを追加します。
Imports Infragistics.Controls.Grids
using Infragistics.Controls.Grids;
3.イベント ハンドラーを追加して、コピーされる選択された xamGrid セルをスタイルします。UnitsOnOrder 列の正の数に対する単純な検証が実行され、パスしないセルはスタイルもコピーもされません。
Private Sub xamGrid_ClipboardCopyingItem(ByVal sender As Object, ByVal e As ClipboardCopyingItemEventArgs)
' コピーされるセルに対する参照を取得します
Dim selectedCell As CellBase = e.Cell
' ヘッダー セル スタイルは変更されません
If selectedCell.Row.RowType <> RowType.HeaderRow Then
' データ セルの有効なデータの検証を追加します
' このケースでは、UnitsOnOrder 列の負の値のセルはコピーされません If selectedCell.Column.Key.Equals("UnitsOnOrder")
AndAlso Convert.ToInt32(e.Cell.Value) <= 0 Then
e.Cancel = True
Return
End If
' 新しいスタイルをコピーされるセルに設定します
selectedCell.Style = TryCast(Me.Resources("grayCellStyle"), Style)
End If
End Sub
void xamGrid_ClipboardCopyingItem(object sender,
ClipboardCopyingItemEventArgs e)
{
// コピーされるセルに対する参照を取得します
CellBase selectedCell = e.Cell;
// ヘッダー セル スタイルは変更されません
if (selectedCell.Row.RowType != RowType.HeaderRow)
{
// データ セルの有効なデータの検証を追加します
// このケースでは、UnitsOnOrder 列の負の値のセルは コピーされません if (selectedCell.Column.Key.Equals("UnitsOnOrder")
&& Convert.ToInt32(e.Cell.Value) <= 0)
{
e.Cancel = true;
return;
}
// 新しいスタイルをコピーされるセルに設定します
selectedCell.Style = this.Resources["grayCellStyle"] as Style;
}
}