Как использовать мое пользовательское свойство в качестве триггера? - PullRequest
1 голос
/ 03 июня 2011

У меня есть привязка класса (соединения) к 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>

Однако с помощью этого кода я получаю ошибку компилятора «Не удается разрешить свойство стиля« Фон ». Убедитесь, что типом-владельцем является тип TargetType стиля, или используйте синтаксис Class.Property для указания свойства».

Что я пропустил? Как заставить это работать?

1 Ответ

1 голос
/ 03 июня 2011

Измените его на Property="TextBlock.Background" или укажите соответствующий TargetType в вашем стиле.

Я не думаю, что триггер будет работать, кстати, так как он будет искать свойство в самом элементе управления, а не в его DataContext, вместо этого используйте DataTrigger.

...