5

我有一个带边框的用户控件,边框的颜色应该使用依赖属性设置。我还想为边框的不透明度设置动画。我当前的 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

4

2 回答 2

2

您的AnimatedBorderBrush名字具有误导性,因为它与 aBorder不是a相关BorderBrush。如果要为 设置动画Border.Opacity,请使用Border.OpacityinDoubleAnimation代替BorderBrush.Opacity

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
    Storyboard.TargetProperty="Border.Opacity"
    RepeatBehavior="Forever"
    AutoReverse="True"
    From="1"
    To="0.0"
    Duration="0:0:1" />

更新>>>

Ahhhhh,我的坏...由于动画是在 内部定义的Border,因此无需引用它,只需使用Opacity

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
    Storyboard.TargetProperty="Opacity"
    RepeatBehavior="Forever"
    AutoReverse="True"
    From="1"
    To="0.0"
    Duration="0:0:1" />
于 2013-10-08T12:20:56.400 回答
2

我认为这里的问题是动画只有在有一个对象(画笔)动画时才会起作用。如果您在DependencyProperty没有默认值的情况下注册您的,则默认情况下为空。请尝试使用默认值注册 DP

public static readonly DependencyProperty NotificationColorProperty = DependencyProperty.Register(
    "NotificationColor",
    typeof(Brush),
    typeof(ImageViewerUserControl),
    new PropertyMetadata(Brushes.Transparent)
);

编辑:

正如@Sheridan 所说,使用Storyboard.TargetProperty="Opacity"而不是Border.Opacity. 尽管如果您指定直接BorderBrush它可以工作,但它对有界 DP 不起作用。

于 2013-10-08T12:31:22.080 回答