如何在Silverlight DataGrid中突出显示单元格

时间:2011-12-08 16:34:53

标签: silverlight c#-4.0 silverlight-4.0

如何在Silverlight中以编程方式突出显示DataGrid单元格?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要执行以下操作:

  1. 将属性(我们将其命名为IsSelectedInChart)添加到您的数据项类中。此属性必须为public,并且必须在其值更改时引发INotifyPropertyChanged.PropertyChanged事件。
  2. lineseries_SelectionChanged中,您应找到与所选点对应的数据项,并为其IsSelectedInChart设置为true,为其他人设置false
  3. 使DataGridRow中存在的DataGrid的所有实例都设置为Binding Background属性Path=IsSelectedInChart和自定义`IValueConverter'。
  4. 转换器应如下所示:

    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;
      }
    }
    

    最后一步是最棘手的。可以通过覆盖DataGridRow Style来实现。一种方法显示在https://stackoverflow.com/a/4268159/795861中,另一种显示在https://stackoverflow.com/a/3542179/795861中。看看那些。

    所有这些步骤都是必需的,因为DataGrid中可能有很多行。它使用UI virtualization,因此无法在所需的Background上简单设置DataGridRow属性,因为单个行对象用于显示多个数据项。因此,使其与滚动一起工作的唯一方法是将背景绑定到数据项。

    <强>更新

    要突出显示设计时已知的列中的单元格,请将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>
    

    应该工作,虽然我没有尝试过。 xaml与我建议用于突出显示整行的操作相同,但将其应用于特定列中的单元格。