Как связать свойство Setter 'Property' в шаблоне элемента управления - PullRequest
0 голосов
/ 17 октября 2019

Я пишу пользовательский элемент управления WPF, который называется ValveControl. Он имеет следующие свойства DependencyProperties:

private static readonly DependencyProperty HasDefaultProperty = DependencyProperty.Register("HasDefault", typeof(bool), typeof(ValveControl), new FrameworkPropertyMetadata(OnValveDefaultStateChanged));

public bool HasDefault
{
    get { return (bool)GetValue(HasDefaultProperty); }
    set { SetValue(HasDefaultProperty, value); }
}

public static readonly DependencyProperty IsGlowingProperty = DependencyProperty.Register("IsGlowing", typeof(bool), typeof(ValveControl), new UIPropertyMetadata(false));

public bool IsGlowing
{
    get { return (bool)GetValue(IsGlowingProperty); }
    set { SetValue(IsGlowingProperty, value); }
}

Я хочу запустить / остановить отображение свойства заливки пути в моем элементе управления в соответствии с изменением значения HasDefault. Основываясь на записи в блоге: http://www.eoinoflynn.com/2016/02/wpf-storyboard-animations-part-one/ Я обновил свой usercontrol.xaml, как описано ниже:

...
<ControlTemplate.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding HasDefault}" Value="True" />
            <Condition Binding="{Binding IsGlowing}" Value="False" />
        </MultiDataTrigger.Conditions>
        <!-- The following line raises the error when uncommented -->
        <!-- Setter Property="{Binding IsGlowing}" Value="True" /-->  
        <MultiDataTrigger.EnterActions>
            <BeginStoryboard >
                <Storyboard>
                    <ColorAnimation To="DarkRed" 
                                Storyboard.TargetName="Path"
                                Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" 
                                RepeatBehavior="Forever"
                                AutoReverse="True"
                                Duration="0:0:0.7" />
                </Storyboard>
            </BeginStoryboard>
        </MultiDataTrigger.EnterActions>
    </MultiDataTrigger>
</ControlTemplate.Triggers>

Когда я раскомментирую строку Setter, я получаю следующую ошибку:

Error   XDG0062 A 'Binding' cannot be set on the 'Property' property of type 'Setter'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.   

Кажется, что я не могу указать {Binding XXX} для свойства Property.

Как я могу установить для свойства IsGlowing значение true, когда я запускаю раскадровку? Мне не нужно, чтобы свойство IsGlowing было видно снаружи моего пользовательского элемента управления.

Другой вопрос: как я могу остановить эффект свечения, когда значение HasDefault изменяется на False?

Спасибо за вашу помощь

...