2017-06-25 6 views
1

WPFコントロールのテキストの既定の色を取得するにはどうすればよいですか?私はフォアグラウンドカラーブラシをデータバインディングしていて、特定の条件下で色を変更できるようにしたいだけです。WPFの既定のテキストカラー(データバインディング用の前景色)

単純な例は、2番目の列の値が7のときにセルを赤色にすることです。テキストの既定の色がわからない場合は、他のセルからわずかに外れています。下の画像では、デフォルトのブラシは青色です。私はBushes.Blackを7以外の値に使用します。 Slightly Different Color

データバインディングラインのC#コードは、XAMLコードは以下である

public Brush brush 
    { 
     get 
     { 
      if (data2 == 7) 
       return Brushes.Red; 
      return Brushes.Black; 
     } 
    } 

あります。プロパティ値のみが設定されるように

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <ListView Grid.Row="0" Grid.Column="0" Margin="10,20,10,10" ItemsSource="{Binding data}"     
       Name="DataList"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=data1}"> 
         <GridViewColumn.Header> 
          <GridViewColumnHeader Tag="Data1"> 
           <TextBlock>Data 1</TextBlock> 
          </GridViewColumnHeader> 
         </GridViewColumn.Header> 
        </GridViewColumn> 
        <GridViewColumn Width="150"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock x:Name="Txt2" Text="{Binding data2}" Foreground="{Binding brush}" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
         <GridViewColumn.Header> 
          <GridViewColumnHeader Tag="Data2"> 
           <TextBlock>Data 2</TextBlock> 
          </GridViewColumnHeader> 
         </GridViewColumn.Header> 
        </GridViewColumn> 
        <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=data3}"> 
         <GridViewColumn.Header> 
          <GridViewColumnHeader Tag="Data3"> 
           <TextBlock>Data 3</TextBlock> 
          </GridViewColumnHeader> 
         </GridViewColumn.Header> 
        </GridViewColumn> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

答えて

1

だけで、あなたがコントロールに適用されるスタイルでトリガーを使用する必要があります

そして、一定の条件の下で色を変更できるようにしたいですその "一定の条件"の下で。たとえば:

<GridViewColumn Width="150"> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock x:Name="Txt2" Text="{Binding data2}"> 
       <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding data2}" Value="7"> 
           <Setter Property="Foreground" Value="Red"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      <TextBlock/> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
    <GridViewColumn.Header> 
     <GridViewColumnHeader Tag="Data2"> 
      <TextBlock>Data 2</TextBlock> 
     </GridViewColumnHeader> 
    </GridViewColumn.Header> 
</GridViewColumn> 

はまた、コンバータを使用してプロパティにバインドして、デフォルト値を変更したくないときBinding.DoNothingを返します。コンバーターは、より複雑なシナリオを扱うときに役立ちます。これまでのところあなたの質問に情報が与えられれば、上記はうまくいくはずです。

+0

ありがとう、素晴らしい答え。よく働く。私は 'TextBlock'にスタイルトリガーを置くことを知らなかった。 – Mochan

関連する問題