2012-03-13 3 views
0

stackoverflow에 대한 많은 도움을 찾은 후에, 나는 아직 답변을 찾을 수없는 문제로 고심하고 있습니다. 내 목표는 다음과 같습니다 :Elementstyle의 참조 목록 값

나는 숫자로 가득 wpf/C# 응용 프로그램에서 DataGrid가 있습니다. 숫자가 양수인지 음수인지에 따라 전경 글꼴을 녹색 또는 빨간색으로 변경하고 싶습니다. DataGrid에 대한 itemsource에는 다음과 같은 요소를 포함하는 내 자신의 클래스의 목록입니다

  • 문자열 설명
  • 내가 수동의 열을 구성한

totalMoney이라고 12 복식의 목록 첫 번째 설명을 누른 다음 totalMoney [0], totalMoney [1] 등의 값을 표시하도록 DataGrid에 저장합니다. 당신은 코드에서 보는 바와 같이,

<DataGridTextColumn.ElementStyle> 
    <Style TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="1"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="0"> 
       <Setter Property="Foreground" Value="Black"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="-1"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTextColumn.ElementStyle> 

그러나 : 일부 검색 후, 나는 다음과 같은 코드로 IValueConverter datatrigger 방법을 통해 플러스 유래에 여기에 값을 기준으로 각 셀의 전경 색상을 변경하는 방법을 발견 , WPF에서 내 목록 (totalMoney [X])의 개별 항목에 대한 바인딩을 참조해야합니다. 따라서 수동으로 내 DataGrid의 각 열에 대한 스타일을 설정해야합니다. 여러 데이터 그리드에서이 스타일을 사용하고 싶기 때문에이 방법은별로 비현실적입니다.

내 질문은 - 일반적으로 셀 값에 따라 스타일이 변경되도록 정의 할 수 있습니까? 아니면 내가 간과 한 목표를 달성하기위한 완전히 다른 방법이 있을까요?

도움 주셔서 감사합니다. 내일은 당신이 결정하는 경우에 언뜻

답변

0

, 당신은 ... 잠재적 인 캐치이 여기에 ... 모든 totalMoney [] 열에

<Style TargetType="{x:Type TextBlock}" x:Key="MoneyIndicatorStyle"> 
     <Style.Triggers> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="1"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="0"> 
       <Setter Property="Foreground" Value="Black"/> 
      </DataTrigger> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="-1"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

을 다음과 같은 스타일을 사용하지만 수있는 다음의 텍스트 textblocks는 다음과 같은 형식의 통화가 될 것입니다 ... $ (1,00) 즉 회계 세계에서 음수 100 달러 인 경우 변환기는이 형식의 문자열을 로캘 중간 숫자 -100.00으로 변환해야합니다. 0, 1 또는 -1 현재 변환기의 논리를 기반으로합니다.

당신의 모델에서 직설적 인 수치 (totlaMoney [n])를 받기 때문에 컨버터가 편하다. 그러나 위의 스타일을 사용하면 으로 표시된 Text에 의존 할 것이다!

그래서 결정은 당신 것입니다.

+0

도움을 주셔서 감사합니다. 그것은 심지어 "0,00 €"형식으로 내 돈 클래스와 함께 작동하므로 내 목적에 완벽하게 맞습니다. 감사합니다. :) – Nemoi