14

DataGridTextColumn の色を変更しようとしています。

これが私がやっていることです:

<DataGridTextColumn 
    Header="Status" 
    Binding="{Binding IsActive, 
               Converter= {StaticResource BoolToStatusConverter}}"
    Foreground="{Binding Path=IsActive,
               Converter={StaticResource BoolToColorConverter}}"/>

テキストは正しく設定されていますが、色は変更されず、次のエラーが発生します。

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or 
FrameworkContentElement for target element. BindingExpression:Path=IsActive; 
DataItem=null; target element is 'DataGridTextColumn' (HashCode=40349079); target 
property is 'Foreground' (type 'Brush')

これを機能させるにはどうすればよいですか?

4

3 に答える 3

16

列の CellStyle の DataTrigger で Style を指定する必要があります。例えば

<Page.Resources>
    <Style TargetType="DataGridCell" x:Key="ActiveCellStyle">
        <Setter Property="Foreground" Value="Blue"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsActive}" Value="{x:Null}">
                <Setter Property="Foreground" Value="Green"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding IsActive}" Value="True">
                <Setter Property="Foreground" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    <Converters:BoolToTextConverter 
        x:Key="BoolToStatusConverter" 
        TargetCondition="True" 
        IsMatchValue="It's active" 
        IsNotMatchValue="It's dead" />
</Page.Resources>
<Grid>
    <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn 
                Header="Status" 
                Binding="{Binding IsActive, 
                    Converter={StaticResource BoolToStatusConverter}}" 
                CellStyle="{StaticResource ActiveCellStyle}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
于 2012-06-08T18:28:14.087 に答える
9

技術的には DataGridTextColumn ではありませんが、これは私が通常行うことです。

<DataGridTemplateColumn Header="Status" SortMemberPath="Status">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToSolidColor}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

必要なデータ コンテキストを取得し、アプリケーションの残りの部分で既に配置されているコンバーターを再利用できます。さらに、目的の効果を得るために、余分なスタイルとデータ トリガーのセットをハード コードしたり維持したりする必要はありません。

于 2015-06-26T13:45:33.447 に答える
-1

前景はブラシであり、色ではありません。XAMLで色を解析できますが、コンバーターを使用してバインディングを作成する場合は使用されません。

BoolToBrushConverterを使用するか、前景としてSolidColorBrushを作成し、その「Color」プロパティをBoolToColorConverterにバインドします。そのようです:

<DataGridTextColumn Header="Status">
    <DataGridTextColumn.Foreground>
        <SolidColorBrush Color="{Binding Path=IsActive, Converter={StaticResource BoolToColorConverter}}" />
    </DataGridTextColumn.Foreground>
</DataGridTextColumn>
于 2012-06-08T15:47:29.620 に答える