Триггер стиля wpf на динамическом пути - PullRequest
1 голос
/ 21 января 2011

В следующем стиле, есть ли способ сделать Binding Path универсальным, чтобы этот стиль мог использоваться несколькими потребителями, каждый из которых предоставляет свой путь привязки?

<Style x:Key="OptionalBackground"
       TargetType="{x:Type DataPresenter:CellValuePresenter}"
       BasedOn="{StaticResource OptionalFieldCellPresenter}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
                                       Path=Record.DataItem.IsEditAllowed}"
                     Value="False">
            <Setter Property="Background" Value="{StaticResource ReadOnlyField}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

1 Ответ

0 голосов
/ 22 января 2011

Вы можете получить из Style для создания сокращенной записи, которая выглядит следующим образом:

<local:BackgroundStyle
    x:Key="OptionalBackground"
    TargetType="{x:Type DataPresenter:CellValuePresenter}"
    BasedOn="{StaticResource OptionalFieldCellPresenter}"
    Path="Record.DataItem.IsEditAllowed"
    Value="{StaticResource ReadOnlyField}"/>

и реализация для этого примера может быть:

public class BackgroundStyle : Style, ISupportInitialize
{
    public string Path { get; set; }
    public object Value { get; set; }

    public void BeginInit() { }

    public void EndInit()
    {
        var trigger = new DataTrigger
        {
            Binding = new Binding
            {
                Path = new PropertyPath(Path),
                RelativeSource = new RelativeSource(RelativeSourceMode.Self)
            },
        };
        trigger.Setters.Add(new Setter(Control.BackgroundProperty, Value));
        Triggers.Add(trigger);
    }
}
...