无法解析属性路径中的所有属性引用

时间:2013-10-08 12:09:36

标签: wpf

我有一个带边框的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

2 个答案:

答案 0 :(得分:2)

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

注册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是不起作用的。

答案 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" />