2013-10-08 178 views
2

我有一個具有邊框的用戶控件,邊框的顏色應設置爲依賴屬性。我也想動畫邊框的不透明度。我目前的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> 

此只給出錯誤:

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

但是,如果我換到BorderBrush的顏色,可以說Black它的工作原理。這是如何實現的?我想通過依賴項屬性設置我的邊界的刷子顏色。是的,依賴屬性是Brush

+1

您是否爲DependencyProperty設置了默認畫筆?如果不是默認值是空的並且會導致這樣的錯誤。 – LPL

+0

@LPL我怎樣才能做到這一點? –

回答

2

我覺得這裏的問題是,如果有一個對象(刷)動畫動畫才起作用。如果你註冊你的DependencyProperty沒有默認值,它默認爲空。請嘗試用默認值

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

編輯註冊DP:

正如@Sheridan說使用Storyboard.TargetProperty="Opacity"代替Border.Opacity。儘管如果你指定了一個直接的BorderBrush它可以工作,但它對於我來說並不適用於一個有界的DP。

+0

聽起來像解決方案,但:我得到此錯誤消息:默認值類型不匹配屬性的類型'NotificationColor'。 –

+0

什麼類型是NotificationColor?刷子還是顏色? – LPL

+0

感謝您的輸入,但在運行時彈出相同的錯誤消息。該物業是刷機。 –

1

AnimatedBorderBrush名稱是一種誤導,因爲它涉及到一個Border一個BorderBrush。如果你想動畫Border.Opacity,然後在DoubleAnimation代替BorderBrush.Opacity使用Border.Opacity

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

UPDATE >>>

AHHHHH,是我不好......隨着動畫的Border中定義的,有沒有必要引用它,只要使用Opacity

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

我可以看到你的命名規則是什麼意思,我嘗試了你的建議,但沒有運氣。 –

+0

你的回答是正確的,但問題是,在這裏的傢伙也「固定」我的問題..謝謝很多! –

+1

完全沒有問題。 – Sheridan

相關問題