2011-12-08 4 views
0

Silverlight에서 프로그래밍 방식으로 DataGrid 셀을 강조 표시하려면 어떻게합니까?Silverlight에서 Cell을 강조 표시하는 방법 DataGrid

+0

특정 셀의 'BackgroundColor'를 설정하거나 특정 데이터 항목의 특정 속성을 표시하는 셀의 색을 설정 하시겠습니까? 데이터 항목이 눈금에 표시 될 때마다 강조 표시가 몇 초 동안 깜박 거리거나 표시되도록 하시겠습니까? 일정한 색상이나 데이터 바인딩 된 색상이 필요합니까? 솔루션은 요구 사항에 따라 크게 달라집니다. 제발, 몇 가지 세부 사항을 제공하십시오. –

+0

기본적으로 bgcolor 만 설정하면됩니다. 내 응용 프로그램에 차트가 있고 내 차트에서 점을 선택하기 위해 lineseries_SelectionChanged 이벤트를 작성했습니다. 선택된 점을 감안할 때, 차트 아래에있는 DataGrid의 값에 해당하는 셀을 배경색 (더 많거나 적은 하이라이트)으로 변경하고 싶습니다. DataGrid에는 차트의 모든 값이 포함됩니다. – John

답변

0

당신은 다음을 수행해야합니다 :

  1. 이 속성을 추가하여 데이터 항목 클래스에 (의이 IsSelectedInChart 이름을 보자). 이 속성은 public이어야하며 값이 변경 될 때마다 INotifyPropertyChanged.PropertyChanged 이벤트를 발생시켜야합니다.
  2. lineseries_SelectionChanged에서 선택한 지점에 해당하는 데이터 항목을 찾아야하고 을 true, 다른 사용자를 false으로 설정해야합니다.
  3. DataGrid에 존재 DataGridRow의 모든 인스턴스 Path=IsSelectedInChart과의 Background 속성에 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을 재정 의하여 구현할 수 있습니다. 하나의 접근법은 https://stackoverflow.com/a/4268159/795861에 표시되고 다른 하나는 https://stackoverflow.com/a/3542179/795861에 표시됩니다. 체크 아웃.

DataGrid에 많은 행이있을 가능성이 있으므로이 모든 단계가 필요합니다. UI virtualization을 사용하기 때문에 DataGridRowBackground 속성을 간단히 설정할 수 없습니다. 단일 행 개체가 여러 데이터 항목을 표시하는 데 사용되기 때문입니다. 따라서 스크롤을 사용하여 작업하게하는 유일한 방법은 배경을 데이터 항목에 바인딩하는 것입니다. I 있지만,

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

작동합니다 :

UPDATE

는 디자인 타임에 알려진 열에서 셀을 강조하려면 DataGridColumn.CellStyle 그 열 정의에 속성을 대신 행 스타일 설정을 설정 시도하지 않았습니다. xaml은 전체 행을 강조 표시하기 위해 제안한 것과 동일하지만 특정 열의 셀에 적용합니다.

+0

어 ... 그래서이 일을하려고합니다 : ' <스타일은 TargetType = "SDK : DataGridRow"> ' 하지만 분명히 속성 설정 도구에 변환기를 추가 할 수 없습니까? – John

+0

좋아, 이제는 SetterValueBindingHelper를 통합 한 구현을 사용하여 행을 강조 표시했습니다. 원하는 셀만 강조 표시 할 수 있습니까? – John

+0

@ 존 디자인 타임에 아는 특정 열의 셀입니까? 아니면 열이 ar 런타임으로 결정 되었습니까? –

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 
관련 문제