Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot resolve all property references in the propertypath

Tags:

wpf

I have a UserControl with a Border, the color of the border should be setted with a Dependency Property. I also want to animate the opacity of the border. My current xaml code looks like this:

<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>

This only give the error:

Cannot resolve all property references in the property path 'BorderBrush.Opacity'. Verify that applicable objects support the properties.

But if I change to color of the BorderBrush to, lets say Black it works. How is this possible to achieve? I want to set the Brush color of my border via a dependency property. And yes, the dependency property is a Brush

like image 999
Tobias Moe Thorstensen Avatar asked Oct 02 '22 18:10

Tobias Moe Thorstensen


2 Answers

I think the problem here is that the animation will only work if there is an object (the Brush) to animate. If you register your DependencyProperty without a default value it is null by default. Please try registering the DP with a default value

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

Edit:

And as @Sheridan says use Storyboard.TargetProperty="Opacity" instead of Border.Opacity. Although it works if you specify a direct BorderBrush it doesn't worked for me with a bounded DP.

like image 106
LPL Avatar answered Oct 07 '22 20:10

LPL


Your AnimatedBorderBrush name is misleading as it relates to a Border and not a BorderBrush. If you want to animate the Border.Opacity, then use Border.Opacity in the DoubleAnimation instead of BorderBrush.Opacity:

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

UPDATE >>>

Ahhhhh, my bad... As the animation is defined inside the Border, there is no need to reference it, just use Opacity:

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
    Storyboard.TargetProperty="Opacity"
    RepeatBehavior="Forever"
    AutoReverse="True"
    From="1"
    To="0.0"
    Duration="0:0:1" />
like image 34
Sheridan Avatar answered Oct 07 '22 18:10

Sheridan