我有一个带边框的UserControl,边框的颜色应该使用依赖属性设置。我还想为边框的不透明度设置动画。我当前的xaml代码如下所示:
<Border BorderBrush="{Binding ElementName=ImageViewerUserControl,
Path=NotificationColor}" BorderThickness="3" x:Name="AnimatedBorderBrush"
Visibility="{Binding ElementName=ImageViewerUserControl,
Path=ShowSequenceErrorNotification, Converter={StaticResource boolToVisibility}}">
<Border.Triggers>
<EventTrigger RoutedEvent="Border.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
Storyboard.TargetProperty="BorderBrush.Opacity"
RepeatBehavior="Forever"
AutoReverse="True"
From="1"
To="0.0"
Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
</Border>
这只会出错:
无法解析属性路径“BorderBrush.Opacity”中的所有属性引用。验证适用的对象是否支持属性。
但是,如果我改为BorderBrush的颜色,可以说Black
它有效。这怎么可能实现?我想通过依赖属性设置边框的Brush颜色。是的,依赖属性是Brush
答案 0 :(得分:2)
我认为这里的问题是动画只有在有动画的对象(画笔)时才有效。如果您在没有默认值的情况下注册DependencyProperty
,则默认为null。请尝试使用默认值
public static readonly DependencyProperty NotificationColorProperty = DependencyProperty.Register(
"NotificationColor",
typeof(Brush),
typeof(ImageViewerUserControl),
new PropertyMetadata(Brushes.Transparent)
);
编辑:
正如@Sheridan所说,使用Storyboard.TargetProperty="Opacity"
代替Border.Opacity
。虽然如果你指定一个直接的BorderBrush
它是有效的,但它对我来说对于有限的DP是不起作用的。
答案 1 :(得分:1)
您的AnimatedBorderBrush
名称具有误导性,因为它与Border
和不 a BorderBrush
有关。如果您想为Border.Opacity
制作动画,请使用Border.Opacity
中的DoubleAnimation
代替BorderBrush.Opacity
:
<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
Storyboard.TargetProperty="Border.Opacity"
RepeatBehavior="Forever"
AutoReverse="True"
From="1"
To="0.0"
Duration="0:0:1" />
更新&gt;&gt;&gt;
啊啊,我的坏...因为动画是在Border
内定义的,所以不需要引用它,只需使用Opacity
:
<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
Storyboard.TargetProperty="Opacity"
RepeatBehavior="Forever"
AutoReverse="True"
From="1"
To="0.0"
Duration="0:0:1" />