如何使用我的自定义属性作为触发器?

时间:2011-06-02 23:51:13

标签: wpf datagrid triggers styles

我有一个类(Compound)绑定到DataGrid。我想在属性设置为true时更改单元格的背景颜色。这是我试过的:

public class Compound : DependencyObject
{
    public static readonly DependencyProperty RSquaredFlagProperty = 
        DependencyProperty.Register("RSquaredFlag", typeof(bool), 
        typeof(Compound), new FrameworkPropertyMetadata(false));

    public bool RSquaredFlag
    {
        get { return (bool)GetValue(RSquaredFlagProperty); }
        set { SetValue(RSquaredFlagProperty, value); }
    }
    ...
}

XAML:

<common:DataGridEx ItemsSource="{Binding}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="R^2" Binding="{Binding RSquared, StringFormat=N3}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Style.Triggers>
                        <Trigger Property="model:Compound.RSquaredFlag" Value="True">
                            <Setter Property="Background" Value="Red"/>
                        </Trigger>                                                
                    </Style.Triggers>
                </Style>                                        
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</common:DataGridEx>

但是,使用此代码,我收到编译器错误“无法解析样式属性'背景'。验证拥有类型是Style的TargetType,还是使用Class.Property语法指定属性”。

我错过了什么?如何使它工作?

1 个答案:

答案 0 :(得分:1)

将其更改为Property="TextBlock.Background"或在您的风格中指定相应的TargetType

我认为触发器不会起作用,因为它会在控件本身而不是DataContext上查找属性,而是使用DataTrigger