2016-05-06 32 views
2

私は3列のデータグリッドを持っています。最後の列は、「✓」または「✗」を表示することによって、行のデータセットが有効または無効になっていることを示しています。 コンテンツの配置が中央で、コンテンツに応じて "テキスト"が緑色( "✓"の場合)または赤色( "✗"の場合)になるように、最後の列のスタイルを設定します。だから私はそれをどのように達成できますか?WPF C# - 内容に応じた列内容の整列とスタイル

<DataGrid x:Name="employeesDataGrid" Margin="5,55,5,0" VerticalAlignment="Top" Height="172" IsSynchronizedWithCurrentItem="False" MinRowHeight="10" HeadersVisibility="Column" AutoGenerateColumns="False" GridLinesVisibility="None" SelectionMode="Single" RowDetailsVisibilityMode="Collapsed" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="nameHeader" Header="{x:Static p:Resources.nameHeader}" Width="100"/> 
     <DataGridTextColumn x:Name="surnameHeader" Header="{x:Static p:Resources.surnameHeader}" Width="200" /> 
     <DataGridTextColumn x:Name="isenabledHeader" Header="{x:Static p:Resources.isenabledHeader}" MinWidth="50"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="HorizontalAlignment" Value="Stretch" /> 
        <Setter Property="HorizontalContentAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
      <DataGridTextColumn.CellStyle> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <Setter Property="HorizontalAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.CellStyle> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

"✓"と "✗"に応じて異なるセルのスタイルを設定するにはどうすればよいですか? ここで私はC#でデータグリッドを埋める方法です。

nameHeader.Binding = new Binding("Name"); 
surnameHeader.Binding = new Binding("Surname"); 
isenabledHeader.Binding = new Binding("IsEnabled"); 

employeesDataGrid.ItemsSource = null; 
Employee employee = new Employee(); 
// returns a List<Employee> 
employeesList = employee.GetAll(); 
employeesDataGrid.ItemsSource = employeesList; 

編集 私は自分自身によって細胞のテキストを整列する方法を考え出しました。コードが更新されます。だから私はそれを緑色または赤色にしたいと思う。助言がありますか?

+0

どのようにチェックやXを設定しますか?彼らはイメージですか?あなたの3番目の列がEmployee.IsEnabledにバインドされていることがわかりますが、 "✓"と "✗"はいつ入ってくるのですか? – Rowbear

答えて

3

"✓"と "✗"が文字列の場合DataGridTextColumnCellStyleにこのようにDataTriggersを追加できます。私のテスト例では、文字列値firstを緑色に使用しています( "✓"に変更する必要があります)。

<Style.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, 
          Path=Content.Text}" Value="first"> 
     <Setter Property="Foreground" Value="Green" /> 
    </DataTrigger> 
</Style.Triggers> 
+0

笑、あなたはフォアグラウンドを読む、私は背景を読む!私はあなたがおそらく正しいと思う:)。緑色のチェックではなく、緑色のセルで表示されるようになります。 – Rowbear

+0

@ロウベール良い点) – bars222

+0

@ bars222完璧な作品。どうもありがとうございました!いくつかの質問をクリアするために、 "✓"と "✗"はブール値の代替メソッドとしてクラスによって提供される文字列です。ああ、はい、私は 'フォアグランド'の色を変更したい:)まだ答えは、背景色のためにも動作します。 –

1

「✓」と「✗」を実際にどのように持ち込むかは関係ありません。私はあなたが緑または赤にセルの背景色を設定したいことを正しく理解していれば、ここでのXAMLのソリューションです:

<DataGridTextColumn x:Name="isenabledHeader" Header="Is Enabled" MinWidth="50"> 
    <DataGridTextColumn.HeaderStyle> 
     <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="HorizontalAlignment" Value="Stretch" /> 
      <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     </Style> 
    </DataGridTextColumn.HeaderStyle> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <Setter Property="HorizontalAlignment" Value="Stretch" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsEnabled}" Value="True"> 
        <Setter Property="Background" Value="Green"></Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsEnabled}" Value="False"> 
        <Setter Property="Background" Value="Red"></Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Margin" Value="2,0"/> 
      <Setter Property="HorizontalAlignment" Value="Center"></Setter> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 

別の(安全な、私は願っています)私が作った仮定はでIsEnabledがあなたの従業員の財産であるということですクラス。ここでは、IsEnabledにバインドする2つのDataTriggersを作成し、セルの背景を適切な色に設定します。私は、セル全体を埋めるために、「ストレッチ」になるようにDataGridCellの水平方向の整列を変更しなければならないことに注意してください。追加のDataGridTextColumn.ElementStyleは、必要なセンタリングを考慮する必要があります。

注:DataTriggersをコードの背後に追加することはできますが、個人的には構文を覚えていないので、私の答えには入れません。

関連する問題