2014-05-22 2 views
0

나는 즉시 WPF DataGrid의 SelectionBackground를 변경하려고합니다. 나는 그것을 묶어 봤는데 작동하지 않았다. 나는 마침내 다음과 같은 발견했지만 여전히 동적 "화이트 스톱"을 제공 할 수 없습니다. 내가 정말로 원하는 것은 LinearGradientBrush에 곧바로 바인드하여 상황이 바뀌면서 밝아지고 어둡게 될 수 있지만 "화이트 스톱"을 동적으로 변화시키는 것에 묶는 방법에 대해 해결할 것입니다.SelectionBackgroundColorKey를 LinearGradientBrush에 바인딩하는 방법은 무엇입니까?

  <DataGrid.Resources> 

       <SolidColorBrush x:Key="SelectionBackgroundColorKey" /> 
       <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1"> 
        <GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="0.0" /> 
        <GradientStop Color="White" Offset="0.3" /> 
        <GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="1.0" /> 
       </LinearGradientBrush> 

       <SolidColorBrush x:Key="SelectionTextColorKey" Color="Black" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{Binding Source={StaticResource SelectionTextColorKey}, Path=Color}" /> 
      </DataGrid.Resources> 

코드 숨김 조각 :

private void DataGridReservationsSelectionChanged(object argSender, SelectionChangedEventArgs argEvtArgs) 
    { 
     Color localBackgroundColorKey = ApplicationSettings.ReservationNormalSelectedBackgroundColor; 
     Color localTextColorKey = ApplicationSettings.ReservationNormalSelectedTextColor; 

     Reservation localReservation = dataGridReservations.SelectedItem as Reservation; 

     if (localReservation == null) 
     { 
      return; 
     } 

     if (localReservation.IsArrived) 
     { 
      localBackgroundColorKey = ApplicationSettings.ReservationArrivedSelectedBackgroundColor; 
      localTextColorKey = ApplicationSettings.ReservationArrivedSelectedTextColor; 
     } 
     else if (localReservation.IsCanceled) 
     { 
      localBackgroundColorKey = ApplicationSettings.ReservationCanceledSelectedBackgroundColor; 
      localTextColorKey = ApplicationSettings.ReservationCanceledSelectedTextColor; 
     } 
     ... etc... 
     ((SolidColorBrush)dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = localBackgroundColorKey; 
     ((SolidColorBrush)dataGridReservations.Resources["SelectionTextColorKey"]).Color = localTextColorKey; 


    } 

답변

1

나는 내가 원하는 것을 알아 냈다. DataGrid 리소스에 키 색상을 더 추가하면 LinearGradientBrush에서 사용할 수 있습니다.

<SolidColorBrush x:Key="SelectionBackgroundColorKey" /> 
<SolidColorBrush x:Key="SelectionBackgroundWhiteStopKey" /> <!-- Added a WhiteStopKey to the resources --> 
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1"> 
    <GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="0.0" /> 
    <GradientStop Color="{Binding Source={StaticResource SelectionBackgroundWhiteStopKey}, Path=Color}" Offset="0.3" /> <!-- Use the WhiteStopKey in the LinearGradientBrush --> 
    <GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="1.0" /> 
</LinearGradientBrush> 

... 다음 코드에서 ...

((SolidColorBrush)dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = localBackgroundColorKey; 
((SolidColorBrush)dataGridReservations.Resources["SelectionBackgroundWhiteStopKey"]).Color = localBackgroundColorKey.Lighten(1.7F); 

참고 : Color.Lighten은() 내가 쓴 확장 방법이 아닌 프레임 워크 방법입니다.

바꾸어 말하면 : 필사는 발명의 어머니입니다.

관련 문제