Я пишу пользовательский элемент управления 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
?
Спасибо за вашу помощь