如何在Silverlight中以编程方式突出显示DataGrid单元格?
答案 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)
您需要执行以下操作:
IsSelectedInChart
)添加到您的数据项类中。此属性必须为public
,并且必须在其值更改时引发INotifyPropertyChanged.PropertyChanged
事件。lineseries_SelectionChanged
中,您应找到与所选点对应的数据项,并为其IsSelectedInChart
设置为true
,为其他人设置false
。DataGridRow
中存在的DataGrid
的所有实例都设置为Binding
Background
属性Path=IsSelectedInChart
和自定义`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;
}
}
最后一步是最棘手的。可以通过覆盖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与我建议用于突出显示整行的操作相同,但将其应用于特定列中的单元格。