2011-12-08 7 views
0

Silverlightでプログラムでデータグリッドセルをハイライト表示するにはどうすればよいですか?SilverlightでCellをハイライトする方法DataGrid

+0

特定のセルの 'BackgroundColor'を設定するだけですか、特定のデータ項目の特定のプロパティを表示するセルの色を設定したいですか?ハイライトを数秒間点滅させたい、またはデータ項目がグリッドに表示されているときはいつでも表示させたいですか?一定の色やデータの色が必要ですか?ソリューションは、要件に強く依存します。いくつかの詳細を記入してください。 –

+0

基本的にbgcolorを設定するだけです。私のアプリケーションにチャートがあり、グラフのポイントを選択するためのlineseries_SelectionChangedイベントを記述しました。選択したポイントが与えられたら、グラフの下にあるデータグリッドの値に対応するセルの背景色(多かれ少なかれハイライト)を変更したいと思います。データグリッドには、チャートのすべての値が含まれています。 – John

答えて

0

あなたは次の操作を行う必要があります:

  1. は、プロパティを追加するには、データ項目のクラスに(のはそれIsSelectedInChart名前を付けてみましょう)。このプロパティはpublicである必要があり、値が変更されるたびにINotifyPropertyChanged.PropertyChangedイベントを発生させる必要があります。
  2. lineseries_SelectionChangedには、選択したポイントに対応するデータ項目があり、IsSelectedInCharttrueに、falseに設定してください。
  3. DataGridに存在するDataGridRowのすべてのインスタンスがそのBackgroundPath=IsSelectedInChartを持つプロパティとカスタム `へBindingセットを持ってIValueConverter」を確認します。

コンバータは、次のようになります。

public class ValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    // TODO: be more careful with nulls and non-expected values 
    bool isSelected = (bool)value; 
    return isSelected ? new SolidColorBrush(Colors.Red) : DependencyProperty.UnsetValue; 
    } 
} 

最後のステップはトリッキーです。これは、DataGridRowStyleを無効にすることで実装できます。 1つのアプローチはhttps://stackoverflow.com/a/4268159/795861に、もう1つのアプローチはhttps://stackoverflow.com/a/3542179/795861に示されています。それらをチェックしてください。

DataGridに多くの行がある可能性があるため、これらの手順はすべて必要です。 UI virtualizationを使用すると、DataGridRowBackgroundプロパティを簡単に設定することは不可能になります。なぜなら、単一の行オブジェクトが複数のデータ項目を表示するためです。したがって、スクロールで動作させる唯一の方法は、バックグラウンドをデータ項目にバインドすることです。設計時に知られている列のセルを強調表示する

UPDATE

は、代わりに、行のスタイルを設定すると、その列の定義にDataGridColumn.CellStyleプロパティを設定します。

<sdk:DataGrid> 
    <sdk:DataGrid.Columns> 
    <sdk:DataGridTextColumn x:Name="theColumnToHighlight"> 
     <sdk:DataGridTextColumn.CellStyle> 
     <Style TargetType="{x:Type sdk:DataGridCell}"> 
      <Setter Property="local:SetterValueBindingHelper.PropertyBinding"> 
      <Setter.Value> 
       <local:SetterValueBindingHelper 
        Type="System.Windows.Controls.Control, System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" 
        Property="Background" 
        Binding="{Binding IsSelectedInChart, Converter={StaticResource highlighterConverter}}"/> 
      </Setter.Value> 
      </Setter> 
     </Style> 
     </sdk:DataGridTextColumn.CellStyle> 
    </sdk:DataGridTextColumn> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 

作業をする必要があり、Iものの試していない。 xamlは、行全体を強調表示するために提案したのと同じことを行いますが、特定の列のセルに適用します。

+0

Ugh ...だから私はこれをやろうとしています: ' <スタイルTargetTypeが= "SDK:DataGridRow"> ' しかし、明らかにプロパティ設定ツールにコンバーターを追加することはできませんか? – John

+0

これで、 'SetterValueBindingHelper'を組み込んだ実装を使って行をハイライト表示させました。私はそれが私が欲しいだけのセルを強調表示することができますか? – John

+0

@Johnこれは設計時に知っている特定の列のセルですか、または列が実行時に決定されていますか? –

0

このコードは、DataGridのセルテンプレートに従って使用できます。 cellContentは、変更したいセルへの参照を提供します。

FrameworkElement cellContent = dataGrid.Columns[0].GetCellContent(dataRow);// datarow is your row where cell intersects. 
cellContent .Style = s; // assuming s is the style you want to apply 
関連する問題